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.XPath
della 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
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.
- 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
Assicurarsi che il progetto faccia riferimento allo spazio dei
System.Xml
nomi.Usare l'istruzione
using
Xml
negli spazi dei nomi eXPath
in modo che non sia necessario qualificare le dichiarazioni in tali spazi dei nomi più avanti nel codice. È possibile usare l'istruzioneusing
prima di qualsiasi altra dichiarazione, come indicato di seguito:using System.Xml; using System.Xml.XPath;
Dichiarare le variabili appropriate. Dichiarare un
XPathDocument
oggetto per contenere il documento XML, unXpathNavigator
oggetto per valutare le espressioni XPath e unXPathNodeIterator
oggetto per scorrere i nodi selezionati. Dichiarare unString
oggetto per contenere le espressioni XPath. Aggiungere il codice di dichiarazione nellaMain
funzione inClass1
.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
Caricare un
XPathDocument
oggetto con il file di esempio Books.xml. LaXPathDocument
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 ilXPath
modello di dati.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");
Creare un oggetto
XPathNavigator
dal documento. L'oggettoXPathNavigator
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();
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)";
Utilizzare il
Evaluate
metodo dell'oggettoXPathNavigator
per valutare l'espressione XPath. IlEvaluate
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));
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]";
Creare un oggetto
XPathNodeIterator
per i nodi selezionati con ilSelect
metodo dell'oggettoXPathNavigator
. rappresentaXPathNodeIterator
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);
Utilizzare ,
XPathNodeIterator
restituito dalSelect
metodo diXPathNavigator
, per spostarsi tra i nodi selezionati. In questo caso, è possibile usare ilMoveNext
metodo diXPathNodeIterator
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); };
Usare il
ReadLine
metodo per aggiungere una pausa alla fine della visualizzazione della console per visualizzare più facilmente i risultati precedenti.// Pause Console.ReadLine();
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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per