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: