Usare Visual C# per eseguire query su XML con un'espressione XPath

Questo articolo illustra come eseguire query su un XPathDocument oggetto con un'espressione XPath (XML Path Language) usando la XPathNavigator classe .

Versione originale del prodotto: Visual Studio, .NET Framework
Numero KB originale: 308333

Riepilogo

XPath viene usato a livello di codice per valutare le espressioni e selezionare nodi specifici in un documento.

Questo articolo fa riferimento allo spazio dei nomi System.Xml.XPathdella libreria di classi di Microsoft .NET Framework.

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

  • Oggetto visivo C#
  • Terminologia XML
  • Creazione e lettura di un file XML
  • Sintassi di XPath

Eseguire query su XML con un'espressione XPath

  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 di Books.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, il file è disponibile nella Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB cartella . È possibile copiare il file 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, un XpathNavigator oggetto per valutare le espressioni XPath e un XPathNodeIterator oggetto per scorrere i nodi selezionati. Dichiarare un String oggetto per contenere le espressioni XPath. Aggiungere il codice di dichiarazione nella Main funzione in Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  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 XPath modello di dati.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Creare un oggetto XPathNavigator dal documento. L'oggetto XPathNavigator viene utilizzato per le query XPath di sola lettura. Le query XPath possono restituire un valore risultante o molti nodi.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. Creare un'espressione XPath per trovare il costo medio di un libro. Questa espressione XPath restituisce un singolo valore. Per informazioni dettagliate sulla sintassi di XPath, vedere Sintassi di XPath nella sezione Riferimenti .

    // Find the average cost of a book.
    // This expression uses standard XPath syntax.
    strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
    
  8. Utilizzare il Evaluate metodo dell'oggetto XPathNavigator per valutare l'espressione XPath. Il Evaluate metodo restituisce i risultati dell'espressione.

    // Use the Evaluate method to return the evaluated expression.
    Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
    
  9. Creare un'espressione XPath per trovare tutti i libri che costano più di 10 dollari. Questa espressione XPath restituisce solo nodi Title dall'origine XML.

    // Find the title of the books that are greater then $10.00.
    strExpression = "/bookstore/book/title[../price>10.00]";
    
  10. Creare un oggetto XPathNodeIterator per i nodi selezionati con il Select metodo dell'oggetto XPathNavigator. rappresenta XPathNodeIterator un set di nodi XPath e supporta le operazioni su questo set di nodi.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. Utilizzare , XPathNodeIteratorrestituito dal Select metodo di XPathNavigator, per spostarsi tra i nodi selezionati. In questo caso, è possibile usare il MoveNext metodo di XPathNodeIterator per scorrere tutti i nodi selezionati.

    Console.WriteLine("List of expensive books:");
    //Iterate through the results showing the element value.
    while (NodeIter.MoveNext())
    {
        Console.WriteLine("Book Title: {0}", NodeIter.Current.Value);
    };
    
  12. Usare il ReadLine metodo 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.

    Nota

    I risultati vengono visualizzati nella finestra della console.

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: Errore di sistema.

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

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

L'errore di eccezione è causato da un'istruzione di elaborazione non valida. Ad esempio, l'istruzione di elaborazione può contenere spazi estranei. L'esempio seguente è un'istruzione di elaborazione non valida:

<?xml version='1.0' ?>

Per risolvere l'eccezione, usare una delle soluzioni seguenti:

  • Correggere l'istruzione di elaborazione non valida. L'esempio seguente è un'istruzione di elaborazione valida:

    <?xml version='1.0'?>
    
  • Rimuovere l'istruzione di elaborazione XML dal file Books.xml.

Riferimenti