Maison > développement back-end > C++ > Comment analyser correctement XML avec des espaces de noms à l'aide de LINQ to XML ?

Comment analyser correctement XML avec des espaces de noms à l'aide de LINQ to XML ?

Linda Hamilton
Libérer: 2025-01-19 02:11:13
original
735 Les gens l'ont consulté

How to Correctly Parse XML with Namespaces Using LINQ to XML?

Gestion des espaces de noms XML dans LINQ to XML

Lors du traitement de données XML contenant des espaces de noms, une gestion appropriée des espaces de noms est essentielle pour récupérer et manipuler les éléments requis. Voici comment utiliser LINQ to XML pour parcourir des espaces de noms contenant du XML :

Exemple de code fourni :

<code class="language-csharp">string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>";

XDocument xmlElements = XDocument.Parse(theXml);

var elements = from data in xmlElements.Descendants("Result")
               select new {
                            TheBool = (bool)data.Element("TheBool"),
                            TheId = (int)data.Element("TheId"),
                          };</code>
Copier après la connexion

Ce code n'analyse pas correctement le XML lorsque des espaces de noms sont utilisés dans la chaîne XML, ce qui entraîne des valeurs nulles. Pour résoudre ce problème, nous devons spécifier explicitement l'espace de noms XML dans la requête LINQ.

Pour définir un espace de noms XML dans une requête LINQ, vous pouvez utiliser l'objet XNamespace. Cet objet vous permet de créer des instances XName avec le préfixe d'espace de noms et l'URI appropriés.

Voici le code corrigé :

<code class="language-csharp">string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>";

XDocument xmlElements = XDocument.Parse(theXml);
XNamespace ns = "http://myvalue.com";
XNamespace nsa = "http://schemas.datacontract.org/2004/07/My.Namespace";
var elements = from data in xmlElements.Descendants(ns + "Result")
              select new
              {
                  TheBool = (bool)data.Element(nsa + "TheBool"),
                  TheId = (int)data.Element(nsa + "TheId"),
              };</code>
Copier après la connexion

Dans le code corrigé, nous déclarons d'abord les XNamespace objets ns et nsa en utilisant les URI d'espace de noms. Ensuite, dans les requêtes Descendants et Element, nous spécifions XName avec le préfixe d'espace de noms. De cette manière, LINQ to XML peut identifier et accéder correctement aux éléments dans l'espace de noms spécifié.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal