Utiliser Visual C# pour interroger du code XML avec une expression XPath

Cet article explique comment interroger un XPathDocument objet avec une expression XPath (XML Path Language) à l’aide de la XPathNavigator classe .

Version d’origine du produit : Visual Studio, .NET Framework
Numéro de la base de connaissances d’origine : 308333

Résumé

XPath est utilisé par programme pour évaluer des expressions et sélectionner des nœuds spécifiques dans un document.

Cet article fait référence à l’espace de noms System.Xml.XPathbibliothèque de classes Microsoft .NET Framework .

Cet article suppose que vous êtes familiarisé avec les rubriques suivantes :

  • Visual C#
  • Terminologie XML
  • Création et lecture d’un fichier XML
  • Syntaxe XPath

Interroger du code XML avec une expression XPath

  1. Créez une application console Visual C# dans Visual Studio.

    Remarque

    • Cet exemple utilise un fichier nommé Books.xml. Vous pouvez créer votre propre fichier Books.xml ou utiliser l’exemple inclus dans les démarrages rapides du Kit de développement logiciel (SDK) .NET. Si vous n’avez pas installé les guides de démarrage rapide et que vous ne souhaitez pas les installer, consultez la section Références pour l’emplacement de téléchargement Books.xml. Si les guides de démarrage rapide sont installés, le fichier se trouve dans le Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB dossier . Vous pouvez copier le fichier dans le \Bin\Debug dossier, qui se trouve sous le dossier dans lequel vous avez créé ce projet.
  2. Assurez-vous que le projet fait référence à l’espace de System.Xml noms .

  3. Utilisez l’instruction using sur les Xml espaces de noms et XPath afin de ne pas avoir à qualifier les déclarations dans ces espaces de noms ultérieurement dans votre code. Vous pouvez utiliser l’instruction using avant toute autre déclaration, comme suit :

    using System.Xml;
    using System.Xml.XPath;
    
  4. Déclarez les variables appropriées. Déclarez un XPathDocument objet pour contenir le document XML, un XpathNavigator objet pour évaluer des expressions XPath et un XPathNodeIterator objet pour itérer au sein des nœuds sélectionnés. Déclarez un String objet pour contenir les expressions XPath. Ajoutez le code de déclaration dans la Main fonction dans Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Chargez un XPathDocument avec l’exemple de fichier Books.xml. La XPathDocument classe utilise XSLT (Extensible Stylesheet Language Transformations) pour fournir un cache rapide et orienté performances pour le traitement de documents XML. Il est similaire au modèle DOM (Document Object Model) XML, mais il est hautement optimisé pour le traitement XSLT et le modèle de XPath données.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Créez un à XPathNavigator partir du document. L’objet XPathNavigator est utilisé pour les requêtes XPath en lecture seule. Les requêtes XPath peuvent retourner une valeur résultante ou de nombreux nœuds.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. Créez une expression XPath pour trouver le coût moyen d’un livre. Cette expression XPath retourne une valeur unique. Pour plus d’informations sur la syntaxe XPath, consultez Syntaxe XPath dans la section Références .

    // Find the average cost of a book.
    // This expression uses standard XPath syntax.
    strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
    
  8. Utilisez la Evaluate méthode de l’objet XPathNavigator pour évaluer l’expression XPath. La Evaluate méthode retourne les résultats de l’expression.

    // Use the Evaluate method to return the evaluated expression.
    Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
    
  9. Créez une expression XPath pour rechercher tous les livres qui coûtent plus de 10 dollars. Cette expression XPath retourne uniquement les nœuds Title de la source XML.

    // Find the title of the books that are greater then $10.00.
    strExpression = "/bookstore/book/title[../price>10.00]";
    
  10. Créez un XPathNodeIterator pour les nœuds sélectionnés avec la Select méthode du XPathNavigator. représente XPathNodeIterator un ensemble de nœuds XPath et prend en charge les opérations sur cet ensemble de nœuds.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. Utilisez le XPathNodeIterator, qui a été retourné par la Select méthode de XPathNavigator, pour parcourir les nœuds sélectionnés. Dans ce cas, vous pouvez utiliser la MoveNext méthode de pour XPathNodeIterator itérer tous les nœuds sélectionnés.

    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. Utilisez la ReadLine méthode pour ajouter une pause à la fin de l’affichage de la console afin d’afficher plus facilement les résultats ci-dessus.

    // Pause
    Console.ReadLine();
    
  13. Générez et exécutez votre projet.

    Remarque

    Les résultats sont affichés dans la fenêtre de console.

Résolution des problèmes

Lorsque vous testez le code, vous pouvez recevoir le message d’erreur d’exception suivant :

Exception non prise en charge de type System.Xml. XmlException s’est produite dans System.xml.dll
Informations supplémentaires : Erreur système.

L’erreur d’exception se produit sur la ligne de code suivante :

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

L’erreur d’exception est due à une instruction de traitement non valide. Par exemple, l’instruction de traitement peut contenir des espaces superflus. L’exemple suivant est une instruction de traitement non valide :

<?xml version='1.0' ?>

Pour résoudre l’exception, utilisez l’une des résolutions suivantes :

  • Corrigez l’instruction de traitement non valide. L’exemple suivant est une instruction de traitement valide :

    <?xml version='1.0'?>
    
  • Supprimez l’instruction de traitement XML du fichier Books.xml.

References