Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Python - Procesamiento XML

Página anterior Página siguiente

XML es un lenguaje portátil de código abierto que permite a los programadores desarrollar aplicaciones que pueden ser leídas por otras aplicaciones, independientemente del sistema operativo y / o lenguaje de desarrollo.

¿Qué es XML?

El Lenguaje de marcado extensible (XML) es un lenguaje de marcado muy parecido a HTML o SGML. Esto es recomendado por el Consorcio World Wide Web y está disponible como estándar abierto.

XML es extremadamente útil para realizar un seguimiento de pequeñas y medianas cantidades de datos sin necesidad de una red troncal basada en SQL.

API y arquitecturas de analizador XML

La biblioteca estándar de Python proporciona un conjunto mínimo pero útil de interfaces para trabajar con XML.

Las dos API más básicas y más utilizadas para datos XML son las interfaces SAX y DOM.

  • API simple para XML (SAX) - Aquí, registra devoluciones de llamada para eventos de interés y luego deja que el analizador continúe con el documento. Esto es útil cuando sus documentos son grandes o tiene limitaciones de memoria, analiza el archivo a medida que lo lee desde el disco y el archivo completo nunca se almacena en la memoria.

  • API de modelo de objetos de documento (DOM) - Esta es una recomendación del World Wide Web Consortium en la que todo el archivo se lee en la memoria y se almacena en una forma jerárquica (basada en árboles) para representar todas las características de un documento XML.

SAX obviamente no puede procesar información tan rápido como DOM cuando trabaja con archivos grandes. Por otro lado, el uso exclusivo de DOM puede acabar con sus recursos, especialmente si se utiliza en muchos archivos pequeños.

SAX es de solo lectura, mientras que DOM permite cambios en el archivo XML. Dado que estas dos API diferentes se complementan literalmente entre sí, no hay ninguna razón por la que no pueda usar ambas para proyectos grandes.

Para todos nuestros ejemplos de código XML, usemos un archivo XML simple movies.xml como entrada -

    War, Thriller   DVD   2003   PG   10   Habla sobre una guerra entre Estados Unidos y Japón     Anime, ciencia ficción   DVD   1989   R   8   Una ficción científica     Anime, Action   DVD   4   PG   10   ¡Vash the Stampede!     Comedy   VHS   PG   2   Aburrimiento visible    

Análisis de XML con API SAX

SAX es una interfaz estándar para el análisis de XML controlado por eventos. Analizar XML con SAX generalmente requiere que cree su propio ContentHandler subclasificando xml.sax.ContentHandler.

Su ContentHandler maneja las etiquetas y atributos particulares de su (s) sabor (s) de XML. Un objeto ContentHandler proporciona métodos para manejar varios eventos de análisis. Su analizador propietario llama a los métodos ContentHandler mientras analiza el archivo XML.

Los métodos startDocument y endDocument se llaman al principio y al final del archivo XML. El método caracteres (texto) se pasan datos de caracteres del archivo XML a través del texto del parámetro.

El ContentHandler se llama al principio y al final de cada elemento. Si el analizador no está en modo de espacio de nombres, los métodos startElement (etiqueta, atributos) y endElement (etiqueta) son llamados; de lo contrario, los métodos correspondientes startElementNS y endElementNS son llamados. Aquí, la etiqueta es la etiqueta del elemento y los atributos son un objeto de atributos.

Aquí hay otros métodos importantes que debe comprender antes de continuar:

El make_parser Método

El siguiente método crea un nuevo objeto analizador y lo devuelve. El objeto de analizador creado será del primer tipo de analizador que encuentre el sistema.

 xml.sax.make_parser ([parser_list]) 

Aquí está el detalle de los parámetros:

  • parser_list - El argumento opcional que consiste en una lista de analizadores a utilizar que deben implementar el método make_parser.

El analizar Método

El siguiente método crea un analizador SAX y lo usa para analizar un documento.

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

Aquí está el detalle de los parámetros:

  • xmlfile - Este es el nombre del archivo XML para leer.

  • administrador de contenido - Debe ser un objeto ContentHandler.

  • manejador de errores - Si se especifica, errorhandler debe ser un objeto SAX ErrorHandler.

La parseString Método

Hay un método más para crear un analizador SAX y analizar la cadena XML especificada .

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

Aquí está el detalle de los parámetros:

  • xmlstring - Este es el nombre de la cadena XML para leer.

  • administrador de contenido - Debe ser un objeto ContentHandler.

  • manejador de errores - Si se especifica, errorhandler debe ser un objeto SAX ErrorHandler.

Ejemplo

 #! / usr / bin / pythonimport xml.saxclass MovieHandler (xml.sax.ContentHandler):def __init __ (self):self.CurrentData ="" self .type ="" self.format ="" self.year ="" self.rating ="" self.stars ="" self.description ="" # Llamar cuando un elemento comienza def startElement (self, tag, atributos) :self.CurrentData =etiqueta si etiqueta =="película":imprimir "***** Película *****" título =atributos ["título"] imprimir "Título:", título # Llamar cuando un elemento termina def endElement (self, tag):if self.CurrentData =="type":print "Type:", self.type elif self.CurrentData =="format":print "Format:", self.format elif self.CurrentData =="año":imprimir "Año:", self.year elif self.CurrentData =="rating":imprimir "Rating:", self.rating elif self.CurrentData =="stars":imprimir "Stars:", self .stars elif self.CurrentData =="description":print "Description:", self.description self.CurrentData ="" # Llamar cuando se lee un carácter def characters (self, content):if self.Cu rrentData =="tipo":self.type =contenido elif self.CurrentData =="formato":self.format =contenido elif self.CurrentData =="año":self.year =contenido elif self.CurrentData =="calificación ":self.rating =contenido elif self.CurrentData ==" estrellas ":self.stars =contenido elif self.CurrentData ==" descripción ":self.description =contenido if (__name__ ==" __main__ "):# crear un XMLReader parser =xml.sax.make_parser () # desactivar namepsaces parser.setFeature (xml.sax.handler.feature_namespaces, 0) # anula el ContextHandler Handler predeterminado =MovieHandler () parser.setContentHandler (Handler) parser (Handler) .xml ") 

Esto produciría el siguiente resultado:

 ***** Película ***** Título:Enemy BehindType:War, ThrillerFormat:DVDAño:2003Rating:PGStars:10Description:Talk about a US-Japan war ***** Movie ***** Título:Transformers Tipo:Anime, Ciencia ficción Formato:DVD Año:1989 Calificación:RS Estrellas:8 Descripción:Una ficción científica ***** Película ***** Título:Trigun Tipo:Anime, Acción Formato:DVD Calificación:PG Estrellas:10 Descripción:Vash the Stampede! ***** Película ***** Título:IshtarTipo:Comedia Formato:VHS Calificación:PG Estrellas:2 Descripción:Aburrimiento visible 

Para obtener detalles completos sobre la documentación de la API SAX, consulte las API estándar de Python SAX.

Análisis de XML con DOM API

El Document Object Model ("DOM") es una API en varios idiomas del World Wide Web Consortium (W3C) para acceder y modificar documentos XML.

El DOM es extremadamente útil para aplicaciones de acceso aleatorio. SAX solo le permite ver un fragmento del documento a la vez. Si está mirando un elemento SAX, no tiene acceso a otro.

Esta es la forma más fácil de cargar rápidamente un documento XML y crear un objeto minidom usando el módulo xml.dom. El objeto minidom proporciona un método analizador simple que crea rápidamente un árbol DOM a partir del archivo XML.

La frase de muestra llama a la función parse (file [, parser]) del objeto minidom para analizar el archivo XML designado por file en un objeto de árbol DOM.

 #! / usr / bin / pythonfrom xml.dom.minidom import parseimport xml.dom.minidom # Documento XML abierto usando minidom parserDOMTree =xml.dom.minidom.parse ("movies.xml" ) colección =DOMTree.documentElementif collection.hasAttribute ("estante"):imprimir "Elemento raíz:% s"% collection.getAttribute ("estante") # Obtener todas las películas de collectionmovies =collection.getElementsByTagName ("película") # Imprimir detalles de cada película. Para películas en películas:imprimir "***** Película *****" si película.hasAttribute ("título"):imprimir "Título:% s"% película.getAttribute ("título" ) 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 ('descripción') [0 ] imprimir "Descripción:% s"% description.childNodes [0] .data 

Esto produciría el siguiente resultado:

 Elemento raíz:Recién llegados ***** Película ***** Título:Enemy BehindType:War, ThrillerFormat:DVDRating:PGDescription:Talk about a US-Japan war ***** Película ***** Título:TransformersTipo:Anime, Ciencia ficción Formato:DVD Calificación:R Descripción:Una ficción científica ***** Película ***** Título:TrigunTipo:Anime, Acción Formato:DVD Calificación:PG Descripción:Vash the Stampede! * **** Película ***** Título:Ishtar Tipo:Comedia Formato:VHS Calificación:PG Descripción:Aburrimiento visible 

Para obtener detalles completos sobre la documentación de la API DOM, consulte las API DOM estándar de Python.


python

  1. Trabajar con Emoji en Python
  2. Conjuntos de Python
  3. Operadores de Python
  4. Decoradores de Python
  5. Tutorial de SciPy en Python:¿Qué es | Ejemplos de bibliotecas y funciones
  6. Archivo ZIP de Python con el ejemplo