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>
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>
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!