Partager via


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 du produit d’origine : Visual Studio, .NET Framework
Numéro de la base de connaissances d’origine : 308333

Résumé

XPath est utilisé par programmation 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.XPathde la bibliothè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.

    Note

    • Cet exemple utilise un fichier nommé Books.xml. Vous pouvez créer votre propre fichier Books.xml, ou vous pouvez utiliser l’exemple inclus dans les guides de démarrage rapide 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 vous avez installé les guides de démarrage rapide, le fichier se trouve dans Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB le 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 System.Xml de noms.

  3. Utilisez l’instruction using sur les espaces de noms et XPath les Xml espaces de noms afin que vous ne soyez pas obligé de qualifier les déclarations dans ces espaces de noms plus loin 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 objet pour effectuer une XPathNodeIterator itération via 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 fichier avec l’exemple de fichier Books.xml. La XPathDocument classe utilise des transformations XSLT (Extensible Stylesheet Language Transformations) pour fournir un cache rapide et orienté performances pour le traitement des documents XML. Il est similaire au modèle DOM (Document Object Model) XML, mais est hautement optimisé pour le traitement XSLT et le XPath modèle de données.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Créez-en 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 la 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 trouver 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é à partir de 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 l’itération XPathNodeIterator sur 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 pour afficher plus facilement les résultats ci-dessus.

    // Pause
    Console.ReadLine();
    
  13. Créez et exécutez votre projet.

    Note

    Les résultats s'affichent dans la fenêtre de la console.

Dépannage

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

Une exception non gérée 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