Nuovo nella versione 2.0.
xml.dom.minidom è un'implementazione minimale dell'interfaccia del modello di oggetto documento. È chiaro che si tratta di una implementazione più semplice del DOM completo ed è anche significativamente più piccola.
Le applicazioni DOM, tipicamente iniziano analizzando del codice XML in un DOM. Con xml.dom.minidom, questo avviene attraverso la funzione di analisi:
from xml.dom.minidom import parse, parseString dom1 = parse('c:\\temp\\mydata.xml') # analizza un file XML per nome datasource = open('c:\\temp\\mydata.xml') dom2 = parse(datasource) # analizza un file aperto dom3 = parseString('<myxml>Alcuni dati<empty/> ancora altri dati</myxml>')
La funzione parse() può prendere sia un nome di file che un oggetto file aperto.
filename_or_file, parser) |
Se si ha a disposizione del codice XML in una stringa, si può utilizzare la funzione parseString():
string[, parser]) |
Entrambe le funzioni restituiscono un oggetto Document che rappresenta il contenuto del documento.
Quello che le funzioni parse() e parseString() fanno è connettere un analizzatore XML con un ``costruttore DOM'' che può accettare eventi di analisi da ogni parser SAX e li converte in un albero DOM. Il nome delle funzioni è spesso causa di confusione, ma sono facili da capire mentre si studia l'interfaccia. L'analisi del documento viene completata prima che queste funzioni terminino; semplicemente queste funzioni non forniscono un'implementazione di un parser loro stesse.
Si può anche creare un Document chiamando un metodo su di un oggetto di ``implementazione DOM''. Si può ottenere questo oggetto sia chiamando la funzione getDOMImplementation() nel package xml.dom o il modulo xml.dom.minidom. Usando l'implementazione del modulo xml.dom.minidom si otterrà sempre la restituzione di una istanza Document dall'implementazione minidom, quando la versione di xml.dom può fornire una implementazione alternativa (questo è facile se si ha il package PyXML installato). Quando si ha un oggetto Document, gli si possono aggiungere nodi figli per popolare il DOM:
from xml.dom.minidom import getDOMImplementation impl = getDOMImplementation() newdoc = impl.createDocument(None, "alcuni_tag", None) top_element = newdoc.documentElement text = newdoc.createTextNode('Alcuni contenuti di testo.') top_element.appendChild(text)
Una volta che si possiede un oggetto di documento DOM, si può accedere a parti del documento XML attraverso le sue proprietà ed i suoi metodi. Queste proprietà sono definite nelle specifiche DOM. La proprietà principale dell'oggetto documento è la documentElement. Fornisce il principale elemento nel documento XML. Il primo che contiene tutti gli altri. Qui un esempio di programma:
dom3 = parseString("<myxml>Some data</myxml>") assert dom3.documentElement.tagName == "myxml"
Quando si finisce con un DOM, lo si deve cancellare. Questo è necessario perché alcune versioni di Python non supportano il meccanismo della garbage collection di oggetti che fanno riferimento ad altri all'interno del ciclo. Finché questa restrizione non verrà rimossa da tutte le versioni di Python, è cosa buona e giusta scrivere il proprio codice come se il ciclo non dovesse essere ripulito.
Il modo per ripulire un DOM è di chiamare il suo metodo unlink():
dom1.unlink() dom2.unlink() dom3.unlink()
unlink() è una estensione specifica di xml.dom.minidom alle API DOM. Prima di chiamare unlink() su di un nodo, il nodo ed i suoi discendenti devono essere sostanzialmente inutili.
Vedete anche: