13.7 xml.dom.minidom -- Implementazione minimale di DOM

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.

parse( filename_or_file, parser)
Restituisce un Document dall'input indicato. filename_or_file può essere sia un nome file o un oggetto assimilabile all'oggetto file. parser, se indicato, deve essere un oggetto analizzatore SAX2. Questa funzione cambia il gestore del documento del parser e attiva il supporto allo spazio dei nomi; altre configurazioni del parser (come l'impostare un risolutore di entità) devono essere impostate prima di inizializzarlo.

Se si ha a disposizione del codice XML in una stringa, si può utilizzare la funzione parseString():

parseString( string[, parser])
Restituisce un Document che rappresenta la stringa. Questo metodo crea un oggetto StringIO per la stringa e passa il tutto a parse().

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:

Modello di Oggetto Documento (DOM) specifiche di livello 1
Raccomandazione W3C per il DOM supportata da xml.dom.minidom.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.