Condividi tramite


Modello a Oggetti Documento (DOM) XML

La classe DOM (Document Object Model) XML è una rappresentazione in memoria di un documento XML. Il DOM consente di leggere, modificare e modificare un documento XML a livello di codice. La classe XmlReader legge anche XML; fornisce tuttavia l'accesso non memorizzato nella cache, forward-only e di sola lettura. Ciò significa che non sono disponibili funzionalità per modificare i valori di un attributo o di un contenuto di un elemento o la possibilità di inserire e rimuovere nodi con XmlReader. La modifica è la funzione primaria del DOM. È il modo comune e strutturato in cui i dati XML vengono rappresentati in memoria, anche se i dati XML effettivi vengono archiviati in modo lineare quando si trovano in un file o provengono da un altro oggetto. Di seguito sono riportati i dati XML.

Inserimento

<?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 strutturare la memoria quando questi dati XML vengono letti nella struttura DOM.

Struttura di documenti XML Struttura del documento XML

All'interno della struttura del documento XML, ogni cerchio in questa illustrazione rappresenta un nodo, denominato oggetto XmlNode . L'oggetto XmlNode è l'oggetto di base nell'albero DOM. La classe XmlDocument , che estende XmlNode, supporta i metodi per eseguire operazioni sul documento nel suo complesso, ad esempio caricandolo in memoria o salvando il codice XML in un file. Inoltre, XmlDocument consente di visualizzare e modificare i nodi nell'intero documento XML. Sia XmlNode che XmlDocument hanno miglioramenti delle prestazioni e dell'usabilità e dispongono di metodi e proprietà per:

  • Accedere e modificare nodi specifici del DOM, ad esempio nodi elemento, nodi di riferimento di entità e così via.

  • Recuperare interi nodi, oltre alle informazioni contenute nel nodo, ad esempio il testo in un nodo elemento.

    Annotazioni

    Se un'applicazione non richiede la struttura o le funzionalità di modifica fornite dal DOM, le classi XmlReader e XmlWriter forniscono l'accesso al flusso forward-only non memorizzato nella cache a XML. Per altre informazioni, vedere XmlReader e XmlWriter.

Gli oggetti Node hanno un set di metodi e proprietà, nonché caratteristiche di base e ben definite. Alcune di queste caratteristiche sono:

  • I nodi hanno un singolo nodo padre, ovvero un nodo padre direttamente sopra di essi. Gli unici nodi che non dispongono di un elemento padre sono la radice del documento, perché è il nodo di primo livello e contiene il documento stesso e frammenti di documento.

  • La maggior parte dei nodi può avere più nodi figlio, che sono nodi direttamente sotto di essi. Di seguito è riportato un elenco di tipi di nodo che possono avere nodi figlio.

    • Documento

    • DocumentFragment

    • Riferimento entità

    • elemento

    • Attributo

    I nodi XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction e DocumentType non includono 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 è la modalità di gestione degli attributi. Gli attributi non sono nodi che partecipano alle relazioni di padre, figlio e fratelli. Gli attributi sono considerati una proprietà del nodo dell'elemento e sono costituiti da un nome e da una coppia di valori. Ad esempio, se si dispone di format="dollardati XML costituiti da " associato all'elemento price, la parola format è il nome e il valore dell'attributo format è dollar. Per recuperare l'attributo format="dollar" del nodo price , chiamare il metodo GetAttribute quando il cursore si trova nel nodo dell'elemento price . Per altre informazioni, vedere Accesso agli attributi nel DOM.

Man mano che XML viene letto in memoria, vengono creati nodi. Tuttavia, non tutti i nodi sono dello stesso tipo. Un elemento in XML ha regole e sintassi diverse rispetto a un'istruzione di elaborazione. Pertanto, man mano che vengono letti vari dati, a ogni nodo viene assegnato un tipo di nodo. Questo tipo di nodo determina le caratteristiche e le funzionalità del nodo.

Per altre informazioni sui tipi di nodi generati in memoria, vedere Tipi di nodi XML. Per altre informazioni sugli oggetti creati nell'albero dei nodi, vedere Mapping della gerarchia di oggetti ai dati XML.

Microsoft ha esteso le API disponibili in World Wide Web Consortium (W3C) DOM Level 1 e Level 2 per semplificare l'uso di un documento XML. Pur supportando completamente gli standard W3C, le classi, i metodi e le proprietà aggiuntive aggiungono funzionalità oltre a ciò che è possibile eseguire usando il DOM XML W3C. Le nuove classi consentono di accedere ai dati relazionali, offrendo metodi per la sincronizzazione con i dati ADO.NET, esponendo simultaneamente i dati come XML. Per ulteriori informazioni, vedere Synchronizing a DataSet with an XmlDataDocument.

Il DOM è più utile per leggere i dati XML in memoria per modificarne la struttura, aggiungere o rimuovere nodi o modificare i dati contenuti da un nodo come nel testo contenuto da un elemento. Tuttavia, sono disponibili altre classi più veloci rispetto al DOM in altri scenari. Per un accesso rapido in avanti e non conservato al flusso di dati XML, utilizzare XmlReader e XmlWriter. Se è necessario un accesso casuale con un modello di cursore e XPath, usare la classe XPathNavigator .

Vedere anche