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.