Modello a oggetti di documenti XML (Document Object Model, DOM)

La classe DOM (Document Object Model) è una rappresentazione in memoria di un documento XML. Grazie al DOM è possibile leggere e modificare un documento XML a livello di codice. Nonostante l'XML venga letto anche dalla classe XmlReader, l'accesso fornito da tale classe è in sola lettura, di tipo forward-only e non memorizzato nella cache. Questo significa che con XmlReader non sono disponibili funzionalità per la modifica dei valori di un attributo o del contenuto di un elemento, né per l'inserimento e la rimozione di nodi. La modifica è la funzione primaria del DOM. È il modo comune e strutturato in cui i dati XML vengono rappresentati nella memoria, sebbene i dati XML effettivi siano memorizzati in modo lineare all'interno di un file o quando provengono da un altro oggetto. Questi dati sono XML:

Input

<?xml version="1.0"?>
  <books>
    <book>
        <author>Carson</author>
        <price format="dollar">31.95</price>
        <pubdate>05/01/2001</pubdate>
    </book>
    <pubinfo>
        <publisher>MSPress</publisher>
        <state>WA</state>
    </pubinfo>
  </books> 

Nella figura seguente viene illustrato come è strutturata la memoria quando questi dati XML vengono letti nella struttura del DOM.

Struttura del documento XML

All'interno della struttura del documento XML, ogni cerchio di questa illustrazione rappresenta un nodo, chiamato oggetto XmlNode, che costituisce l'oggetto di base nella struttura DOM. La classe XmlDocument, che estende XmlNode, supporta i metodi per l'esecuzione di operazioni sul documento nella sua totalità, come ad esempio il caricamento del documento in memoria o il salvataggio del documento XML in un file. XmlDocument costituisce inoltre un modo per visualizzare e modificare i nodi nell'intero documento XML. XmlNode e XmlDocument sono stati entrambi migliorati dal punto di vista delle prestazioni e dell'utilizzo e provvisti di metodi e proprietà per:

  • Accedere e modificare i nodi specifici del DOM, come i nodi degli elementi, i nodi di riferimento alle entità e così via.

  • Recuperare interi nodi, oltre alle informazioni contenute nel nodo, come il testo in un nodo dell'elemento.

    Nota   Se la struttura e le funzionalità di modifica del DOM non sono necessarie a un'applicazione, le classi XmlReader e XmlWriter forniscono all'XML un accesso di flusso non memorizzato nella cache, e di tipo forward-only. Per ulteriori informazioni, vedere Lettura dell'XML con XmlReader e Scrittura dell'XML con XmlWriter.

Gli oggetti Node dispongono di un gruppo di metodi e proprietà, oltre a caratteristiche di base ben definite. Alcune di queste caratteristiche sono:

  • I nodi possiedono un unico nodo padre, ovvero quello al livello immediatamente superiore. Gli unici nodi privi di padre sono quelli di primo livello, ovvero Document, in quanto si tratta dei nodi di livello superiore contenenti il documento stesso e frammenti del documento.

  • La maggior parte dei nodi può avere più nodi figlio, vale a dire nodi al livello immediatamente inferiore. Di seguito viene fornito un elenco di tipi di nodi che possono avere nodi figlio.

    • Document
    • DocumentFragment
    • EntityReference
    • Element
    • Attribute

    I nodi XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction e DocumentType non hanno nodi figlio.

  • I nodi che si trovano allo stesso livello, rappresentati nel diagramma dai nodi book e pubinfo, sono di pari livello.

Una caratteristica del DOM è il modo in cui gestisce gli attributi. Gli attributi non sono nodi che fanno parte di relazioni padre-figlio o tra nodi di pari livello, ma sono considerati una proprietà del nodo dell'elemento e sono costituiti da una coppia composta da nome e valore. Se, ad esempio, si dispone di dati XML costituiti da format="dollar" associato all'elemento price, il termine format è il nome, mentre il valore dell'attributo format è dollar. Per recuperare l'attributo format="dollar" del nodo price, richiamare il metodo GetAttribute quando il cursore si trova in corrispondenza del nodo dell'elemento price. Per ulteriori informazioni, vedere Accesso agli attributi nel DOM.

Man mano che l'XML viene letto in memoria, vengono creati dei nodi. Non tutti i nodi, tuttavia, sono dello stesso tipo. Le regole e la sintassi di un elemento, in XML, sono diverse da quelle di un'istruzione di elaborazione. Quindi mentre avviene la lettura di vari dati, viene assegnato un tipo di nodo a ogni nodo. In base al tipo di nodo, vengono determinate le caratteristiche e la funzionalità del nodo.

Per ulteriori informazioni sui tipi di nodi generati in memoria, vedere Tipi di nodi XML. Per ulteriori informazioni sugli oggetti creati nella struttura dei nodi, vedere Mapping della gerarchia di oggetti in dati XML.

Le API disponibili nel DOM W3C di Livello 1 e Livello 2 sono state estese per facilitare l'utilizzo di documenti XML e le classi, i metodi e le proprietà aggiuntive estendono la funzionalità aldilà di quella già consentita dall'uso del DOM XML W3C, i cui standard sono completamente supportati. Grazie alle nuove classi è possibile accedere ai dati relazionali e usufruire di metodi per la sincronizzazione con i dati ADO.NET, esponendo simultaneamente i dati come XML. Per ulteriori informazioni, vedere Sincronizzazione di un DataSet con un XmlDataDocument.

Il DOM è particolarmente utile per la lettura dei dati XML in memoria per modificarne la struttura, per aggiungere o rimuovere nodi o per modificare i dati appartenenti a un nodo come nel testo contenuto da un elemento. Sono, tuttavia, disponibili altre classi che sono più rapide del DOM in altri scenari. Per ottenere accesso al flusso XML di tipo forward-only e non memorizzato nella cache, utilizzare XmlReader e XmlWriter. Se invece è necessario un accesso casuale con un modello a cursore e XPath, utilizzare la classe XPathNavigator.

Vedere anche

Tipi di nodi XML | Mapping della gerarchia di oggetti in dati XML