Latest web development tutorials

Python análisis XML

¿Qué es XML?

XML significa Extensible Markup Language(e X extensible M arkup I dioma). Usted puede aprender a través de este sitio Tutorial XML

XML está diseñado para transmitir y almacenar datos.

XML es un conjunto de reglas para definir la semántica de etiquetas, estas etiquetas documentará divididos en muchas partes y estas partes que ser identificados.

También es un lenguaje de metamarcado que define la sintaxis del lenguaje utilizado para definir otra, semántica, lenguaje de marcado con estructura de dominio específico.


Pitón de análisis XML

DOM XML común y la programación de interfaces SAX, dos interfaces diferentes con archivos XML cierto, por supuesto, el uso de diferentes ocasiones.

Hay tres maneras de pitón análisis XML, SAX, DOM y elementtree:

1.SAX (API simple para XML)

biblioteca estándar de Python contiene analizador SAX, SAX con el modelo orientado a eventos, provocada por un evento en el proceso de análisis sintáctico XML y llamar a funciones de devolución de llamada definidos por el usuario para manejar archivos XML.

2.DOM (Document Object Model)

Los datos XML se analiza en un árbol en la memoria, que opera a través del árbol de manipular XML.

3.ElementTree (árbol de elementos)

Elementtree como DOM ligero, con un API conveniente y agradable. disponibilidad del código, rápido y consume menos memoria.

Nota: Debido a DOM necesite asignar datos XML en árbol de la memoria, una lenta, la segunda es más consumo de memoria, streaming de SAX lee el archivo XML más rápido, ocupan menos memoria, pero requiere que el usuario para implementar devolución de llamada (controlador de ).

Utilice esta sección para una movies.xml documento de instancia XML dice lo siguiente:

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

Pitón de análisis XML usando SAX

SAX es un API orientada a eventos.

Uso SAX analizar un documento XML consta de dos partes: el analizador y el controlador de eventos.

El analizador se encarga de leer los documentos XML, y envía los controladores de eventos de eventos, tales como elementos comienzan con el evento extremo del elemento;

El controlador de eventos es responsable para el evento en consecuencia, la transferencia de datos XML para su procesamiento.

  • 1, el procesamiento de archivos de gran tamaño;
  • 2, sólo una parte de los contenidos del archivo, o simplemente para obtener información específica del archivo.
  • 3, quiere construir su propio modelo de objetos de la época.

Utilice el saxofón xml.sax forma xml introducido por primera vez en la función de análisis, así como la xml.sax.handler ContentHandler en Python.

método de clase ContentHandler introdujo

personajes método (contenido)

El momento de la llamada:

Desde el principio de la línea, antes de experimentar la etiqueta, hay un valor de carácter, el contenido de estas cadenas.

De una etiqueta, una etiqueta antes de la siguiente encuentro, la presencia del carácter, el valor de contenido de estas cadenas.

De una etiqueta, antes de encontrarse con un final de línea, la presencia de personajes, el valor del contenido de estas cadenas.

Tag puede ser el comienzo de la etiqueta, puede ser el final de la etiqueta.

startDocument método ()

Documentación de inicio llamado.

endDocument método ()

Cuando la llamada llega al final del analizador documento.

startElement (, attrs nombre) método

Call etiqueta de apertura XML encontrado, el nombre es el nombre de la etiqueta, attrs es una etiqueta de valor de la propiedad diccionario.

endElement método (nombre)

Llamar encontró etiqueta final XML.


método make_parser

El siguiente método crea un nuevo objeto analizador y vuelve.

xml.sax.make_parser( [parser_list] )

Descripción de parámetros:

  • parser_list - parámetro opcional, lista analizador

método analizador

El siguiente método crea un analizador SAX y analizar el documento XML:

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

Descripción de parámetros:

  • xmlfile - nombre del archivo XML
  • ContentHandler - debe ser objeto de un ContentHandler
  • controladorErrores - Si no se especifica este parámetro, controladorErrores debe ser un objeto SAX ManejadorError

método parseString

parseString método crea un analizador XML y analizar la cadena de xml:

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

Descripción de parámetros:

  • xmlString - cadena XML
  • ContentHandler - debe ser objeto de un ContentHandler
  • controladorErrores - Si no se especifica este parámetro, controladorErrores debe ser un objeto SAX ManejadorError

Python instancia XML análisis sintáctico

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import xml.sax

class MovieHandler( xml.sax.ContentHandler ):
   def __init__(self):
      self.CurrentData = ""
      self.type = ""
      self.format = ""
      self.year = ""
      self.rating = ""
      self.stars = ""
      self.description = ""

   # 元素开始事件处理
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print "*****Movie*****"
         title = attributes["title"]
         print "Title:", title

   # 元素结束事件处理
   def endElement(self, tag):
      if self.CurrentData == "type":
         print "Type:", self.type
      elif self.CurrentData == "format":
         print "Format:", self.format
      elif self.CurrentData == "year":
         print "Year:", self.year
      elif self.CurrentData == "rating":
         print "Rating:", self.rating
      elif self.CurrentData == "stars":
         print "Stars:", self.stars
      elif self.CurrentData == "description":
         print "Description:", self.description
      self.CurrentData = ""

   # 内容事件处理
   def characters(self, content):
      if self.CurrentData == "type":
         self.type = content
      elif self.CurrentData == "format":
         self.format = content
      elif self.CurrentData == "year":
         self.year = content
      elif self.CurrentData == "rating":
         self.rating = content
      elif self.CurrentData == "stars":
         self.stars = content
      elif self.CurrentData == "description":
         self.description = content
  
if ( __name__ == "__main__"):
   
   # 创建一个 XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # 重写 ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")

El código de seguridad se ejecuta como sigue:

*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Stars: 10
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Stars: 2
Description: Viewable boredom

documentación de la API SAX completa por favor refiérase a los Python API SAX


Utilice xml.dom analizar XML

Document Object Model (Document Object Model, conocido como DOM), que es un tratamiento recomendado por el W3C Lenguaje de Marcado Extensible interfaz de programación estándar.

En un analizador DOM para analizar un documento XML, lea todo el documento a la vez, todos los elementos del documento guardado en una estructura de árbol en la memoria, entonces puede utilizar el DOM para proporcionar diferentes funciones para leer o modificar el documento contenido y la estructura a ser modificados para escribir el contenido del archivo XML.

pitón con xml.dom.minidom para analizar el documento XML, los ejemplos son los siguientes:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from xml.dom.minidom import parse
import xml.dom.minidom

# 使用minidom解析器打开 XML 文档
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
   print "Root element : %s" % collection.getAttribute("shelf")

# 在集合中获取所有电影
movies = collection.getElementsByTagName("movie")

# 打印每部电影的详细信息
for movie in movies:
   print "*****Movie*****"
   if movie.hasAttribute("title"):
      print "Title: %s" % movie.getAttribute("title")

   type = movie.getElementsByTagName('type')[0]
   print "Type: %s" % type.childNodes[0].data
   format = movie.getElementsByTagName('format')[0]
   print "Format: %s" % format.childNodes[0].data
   rating = movie.getElementsByTagName('rating')[0]
   print "Rating: %s" % rating.childNodes[0].data
   description = movie.getElementsByTagName('description')[0]
   print "Description: %s" % description.childNodes[0].data

Los resultados de los procedimientos anteriores son las siguientes:

Root element : New Arrivals
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Rating: PG
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Rating: R
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Description: Viewable boredom

documentación de la API DOM completa por favor refiérase a la Python API del DOM .