Usare Visual C# per esplorare i documenti XML con la classe XPathNavigator

Questo articolo descrive come esplorare i documenti XML con un XPathNavigator oggetto creato da un XPathDocument oggetto .

Versione originale del prodotto: Oggetto visivo C#
Numero KB originale: 308343

Riepilogo

Questo esempio carica un XPathDocument oggetto con dati XML, crea un XPathNavigator oggetto come visualizzazione sui dati e visualizza il codice XML esaminando il documento.

Questo articolo fa riferimento agli spazi dei nomi della libreria di classi di Microsoft .NET Framework seguenti:

  • System.Xml
  • System.Xml.XPath

Per una versione di Microsoft Visual Basic .NET di questo articolo, vedere Come spostarsi in XML con la classe XPathNavigator usando Visual Basic.

Requisiti

Questo articolo presuppone che si abbia familiarità con gli argomenti seguenti:

  • Oggetto visivo C#
  • Terminologia XML
  • Creazione e lettura di un file XML
  • Sintassi XPath (XML Path Language)

Come usare la classe XPathNavigator per spostarsi in XML

  1. Creare una nuova applicazione console Visual C# in Visual Studio.

    Nota

    In questo esempio viene usato un file denominato Books.xml. È possibile creare un file diBooks.xml personalizzato oppure usare l'esempio incluso nelle guide introduttive di .NET Software Development Kit (SDK). Se le guide di avvio rapido non sono installate e non si vuole installarle, vedere la sezione Riferimenti per il percorso di download Books.xml . Se sono installate le guide introduttive, Books.xml si trova nella cartella seguente:
    \Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB

    È possibile copiare Books.xml nella \Bin\Debug cartella che si trova nella cartella in cui è stato creato il progetto.

  2. Assicurarsi che il progetto faccia riferimento allo spazio dei System.Xml nomi.

  3. Usare l'istruzione usingXml negli spazi dei nomi e XPath in modo che non sia necessario qualificare le dichiarazioni in tali spazi dei nomi più avanti nel codice. È possibile usare l'istruzione using prima di qualsiasi altra dichiarazione, come indicato di seguito:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Dichiarare le variabili appropriate. Dichiarare un XPathDocument oggetto per contenere il documento XML e un XPathNavigator oggetto per valutare XPath le espressioni e spostarsi nel documento. Dichiarare un String oggetto per contenere l'espressione XPath . Aggiungere il codice di dichiarazione nella Main routine in Module1.

    XPathNavigator nav;
    XPathDocument docNav;
    
  5. Caricare un XPathDocument oggetto con il file di esempio Books.xml. La XPathDocument classe usa XSLT (Extensible Stylesheet Language Transformations) per fornire una cache rapida e orientata alle prestazioni per l'elaborazione di documenti XML. È simile al DOM (Document Object Model) XML, ma è altamente ottimizzato per l'elaborazione XSLT e il modello di dati XPath.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Creare un XPathNavigator oggetto dal documento. XPathNavigator consente di spostarsi tra i nodi attributi e i nodi dello spazio dei nomi in un documento XML.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. Passare alla radice del documento con il MoveToRoot metodo . MoveToRoot imposta lo strumento di navigazione sul nodo del documento che contiene l'intero albero dei nodi.

    //Initial XPathNavigator to start at the root.
    nav.MoveToRoot();
    
  8. Utilizzare il MoveToFirstChild metodo per passare agli elementi figlio del documento XML. Il MoveToFirstChild metodo passa al primo elemento figlio del nodo corrente. Se è presente l'origine Books.xml , si sta passando dal documento radice agli elementi figlio, alla sezione Commento e al nodo Bookstore.

    //Move to the first child node (comment field).
    nav.MoveToFirstChild();
    
  9. Usare il MoveToNext metodo per scorrere i nodi a livello di pari livello. Il MoveToNext metodo passa all'elemento di pari livello successivo del nodo corrente.

    //Loop through all of the root nodes.
    do
    {
    } while (nav.MoveToNext());
    
  10. Utilizzare la NodeType proprietà per assicurarsi di elaborare solo i nodi dell'elemento e usare la Value proprietà per visualizzare la rappresentazione di testo dell'elemento.

    do
    {
       //Find the first element.
       if (nav.NodeType == XPathNodeType.Element)
       {
            //Determine whether children exist.
            if (nav.HasChildren == true)
            {
                //Move to the first child.
                nav.MoveToFirstChild();
    
                //Loop through all the children.
                do
                {
                    //Display the data.
                    Console.Write("The XML string for this child ");
                    Console.WriteLine("is '{0}'", nav.Value);
                } while (nav.MoveToNext());
            }
        }
    } while (nav.MoveToNext());
    
  11. Utilizzare la HasAttributes proprietà per determinare se un nodo dispone di attributi. È anche possibile usare altri metodi, ad MoveToNextAttributeesempio , per passare a un attributo e controllarne il valore.

    Nota

    Questo segmento di codice illustra solo i discendenti del nodo radice e non l'intero albero.

    do
    {
       //Find the first element.
       if (nav.NodeType == XPathNodeType.Element)
       {
            //if children exist
            if (nav.HasChildren == true)
            {
                //Move to the first child.
                nav.MoveToFirstChild();
                //Loop through all the children.
                do
                {
                    //Display the data.
                    Console.Write("The XML string for this child ");
                    Console.WriteLine("is '{0}'", nav.Value);
    
                    //Check for attributes.
                    if (nav.HasAttributes == true)
                    {
                        Console.WriteLine("This node has attributes");
                    }
                } while (nav.MoveToNext());
            }
        }
    } while (nav.MoveToNext());
    
  12. Utilizzare il ReadLine metodo dell'oggetto Console per aggiungere una pausa alla fine della visualizzazione della console per visualizzare più facilmente i risultati precedenti.

    //Pause.
    Console.ReadLine();
    
  13. Compilare ed eseguire il progetto Visual C#.

Elenco di codice completo

using System;
using System.Xml;
using System.Xml.XPath;

namespace q308343
{
    class Class1
    {
        static void Main(string[] args)
        {
            XPathNavigator nav;
            XPathDocument docNav;

            docNav = new XPathDocument(@"c:\books.xml");
            nav = docNav.CreateNavigator();
            nav.MoveToRoot();

            //Move to the first child node (comment field).
            nav.MoveToFirstChild();

            do
            {
                //Find the first element.
                if (nav.NodeType == XPathNodeType.Element)
                {
                    //Determine whether children exist.
                    if (nav.HasChildren == true)
                    {
                        //Move to the first child.
                        nav.MoveToFirstChild();
                        //Loop through all of the children.
                        do
                        {
                            //Display the data.
                            Console.Write("The XML string for this child ");
                            Console.WriteLine("is '{0}'", nav.Value);
                            //Check for attributes.
                            if (nav.HasAttributes == true)
                            {
                                Console.WriteLine("This node has attributes");
                            }
                        } while (nav.MoveToNext());
                    }
                }
            } while (nav.MoveToNext());
            //Pause.
            Console.ReadLine();
        }
    }
}

Risoluzione dei problemi

Quando si testa il codice, è possibile che venga visualizzato il messaggio di errore di eccezione seguente:

Eccezione non gestita di tipo System.Xml. XmlException si è verificato in system.xml.dll
Informazioni aggiuntive: dichiarazione XML imprevista. La dichiarazione XML deve essere il primo nodo del documento e non è consentito che vengano visualizzati spazi vuoti prima di esso. Riga 1, posizione

L'errore di eccezione si verifica nella riga di codice seguente:

docNav = new XPathDocument("c:\\books.xml");

Per risolvere l'errore, rimuovere gli spazi vuoti che precedono il primo nodo del documento books.xml.

Riferimenti