Maison >développement back-end >C++ >Comment utiliser SelectSingleNode en C# pour récupérer des éléments XML avec des espaces de noms ?
Utilisation de SelectSingleNode pour gérer les espaces de noms XML en C#
Un problème courant lors de l'accès aux éléments XML à l'aide de SelectSingleNode
est qu'il peut renvoyer null si la balise contient un espace de noms XML. Ce problème se produit car SelectSingleNode
ne considère par défaut que les éléments de l'espace de noms par défaut.
Considérez l'exemple de structure XML fourni :
<code class="language-xml"><project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><itemgroup><compile include="clsWorker.cs"></compile></itemgroup></project></code>
Lors du chargement de ce XML dans XmlDocument
et tentative de récupération de l'élément "Compile":
<code class="language-csharp">XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(Xml); XmlNode node = xmldoc.SelectSingleNode("//Compile"); // 返回null</code>
Le résultat sera nul car l'élément "Compile" se trouve dans "https://www.php.cn/link/55a51239dc6fe8cf8c09ec91f36f5250.
Solution : utilisez XmlNamespaceManager
Pour résoudre ce problème, nous devons utiliser XmlNamespaceManager
pour spécifier l'espace de noms correct lors de l'exécution de l'opération SelectSingleNode
:
<code class="language-csharp">XmlNamespaceManager ns = new XmlNamespaceManager(xmldoc.NameTable); ns.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNode node = xmldoc.SelectSingleNode("//msbld:Compile", ns);</code>
XmlNamespaceManager
nous permet de mapper le préfixe d'espace de noms "msbld" à un URI d'espace de noms réel. Avec cette approche, nous pouvons désormais récupérer avec succès l'élément "Compile" en utilisant la syntaxe SelectSingleNode
modifiée.
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!