You are here: Partenza > Dive Into Python > Elaborare XML > Analizzare XML | << >> | ||||
Dive Into PythonPython per programmatori esperti |
Come stavo dicendo, analizzare un documento XML è molto semplice: una riga di codice. Dove andare poi, dipende da voi.
>>> 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>
Come abbiamo visto nella sezione precedente, questo importa il modulo minidom dal package xml.dom. | |
Questa è la riga di codice che fa tutto il lavoro: minidom.parse prende un argomento e ritorna la rappresentazione analizzata del documento XML. L'argomento può essere di vario tipo; in questo caso, è semplicemente un nome di file di un documento XML nel mio disco (per seguirmi, occorre che cambiate il percorso del file in modo che punti alla directory dove avete scaricato gli esempi). Ma potete anche passare un oggetto di tipo file o anche un oggetto che si comporta come un file. Ci avvantaggeremo di questa flessibilità più avanti nel capitolo. | |
L'oggetto ritornato da minidom.parse è un oggetto di tipo Document, un discendente della classe Node. Questo oggetto Document è la radice di una struttura ad albero piuttosto complessa di oggetti Python interconnessi, che rappresenta per intero il documento XML che abbiamo passato a minidom.parse. | |
toxml è un metodo della classe Node (ed è dunque disponibile nell'oggetto Document ottenuto da minidom.parse). toxml stampa l'XML rappresentato da questo Node. Per il nodo Document, viene stampato l'intero documento XML. |
Ora che abbiamo un documento XML in memoria, possiamo iniziare ad elaborarlo.
>>> 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'
<< Package |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
Unicode >> |