| You are here: Inicio > Inmersión en Python > Procesamiento de XML > Análisis de XML | << >> | ||||
Inmersión en PythonPython de novato a experto |
|||||
Como iba diciendo, analizar un documento XML es muy sencillo: una línea de código. A dónde ir partiendo de eso es cosa suya.
>>> from xml.dom import minidom>>> xmldoc = minidom.parse('~/diveintopython/common/py/kgp/binary.xml')
>>> xmldoc
<xml.dom.minidom.Document instance at 010BE87C> >>> print xmldoc.toxml()
<?xml version="1.0" ?> <grammar> <ref id="bit"> <p>0</p> <p>1</p> </ref> <ref id="byte"> <p><xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/>\ <xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/></p> </ref> </grammar>
| Como vio en la sección anterior, esto importa el módulo minidom del paquete xml.dom. | |
| Ésta es la línea de código que hace todo el trabajo: minidom.parse toma un argumento y devuelve una representación analizada del documento XML. El argumento puede ser muchas cosas; en este caso, es sólo el nombre del fichero de un documento XML en mi disco (para poder seguir, tendrá que cambiar la ruta para que coincida con el directorio de ejemplos que habrá descargado). Pero también puede pasarle un objeto de fichero, o incluso un objeto que simule un fichero. Aprovecharemos esta flexibilidad más adelante. | |
| El objeto devuelto por minidom.parse es un objeto de tipo Document, una clase descendiente de Node. Este objeto Document es la raíz de una estructura compleja de tipo árbol de objetos de Python coordinados de manera que representan completamente el documento XML que le indicó a minidom.parse. | |
| toxml es un método de la clase Node (y por tanto está disponible en el objeto Document que obtuvo de minidom.parse). toxml imprime el XML que representa este Node. En el caso del nodo Document, imprime el documento XML entero. |
Ahora que tiene el documento XML en memoria, puede empezar a recorrerlo.
>>> xmldoc.childNodes[<DOM Element: grammar at 17538908>] >>> xmldoc.childNodes[0]
<DOM Element: grammar at 17538908> >>> xmldoc.firstChild
<DOM Element: grammar at 17538908>
>>> grammarNode = xmldoc.firstChild >>> print grammarNode.toxml()<grammar> <ref id="bit"> <p>0</p> <p>1</p> </ref> <ref id="byte"> <p><xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/>\ <xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/></p> </ref> </grammar>
>>> grammarNode.childNodes[<DOM Text node "\n">, <DOM Element: ref at 17533332>, \ <DOM Text node "\n">, <DOM Element: ref at 17549660>, <DOM Text node "\n">] >>> print grammarNode.firstChild.toxml()
>>> print grammarNode.childNodes[1].toxml()
<ref id="bit"> <p>0</p> <p>1</p> </ref> >>> print grammarNode.childNodes[3].toxml()
<ref id="byte"> <p><xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/>\ <xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/></p> </ref> >>> print grammarNode.lastChild.toxml()
![]()
>>> grammarNode <DOM Element: grammar at 19167148> >>> refNode = grammarNode.childNodes[1]>>> refNode <DOM Element: ref at 17987740> >>> refNode.childNodes
[<DOM Text node "\n">, <DOM Text node " ">, <DOM Element: p at 19315844>, \ <DOM Text node "\n">, <DOM Text node " ">, \ <DOM Element: p at 19462036>, <DOM Text node "\n">] >>> pNode = refNode.childNodes[2] >>> pNode <DOM Element: p at 19315844> >>> print pNode.toxml()
<p>0</p> >>> pNode.firstChild
<DOM Text node "0"> >>> pNode.firstChild.data
u'0'
<< Paquetes |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
Unicode >> |