Python3 análisis XML
¿Qué es XML?
XML se refiere al lenguaje de marcado extensible(e X extensible M arkup I dioma), un subconjunto del lenguaje de marcado generalizado estándar, es un método para marcar un documento electrónico para tener un lenguaje de marcado estructurado. 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.
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/python3 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/python3 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 .