Maison >développement back-end >C++ >Comment puis-je résoudre les collisions d'espaces de noms lors de l'utilisation de SelectSingleNode avec XmlDocument ?
Naviguer dans les conflits d'espaces de noms dans l'analyse XML avec XmlDocument
Les documents XML utilisent souvent des espaces de noms pour différencier des éléments portant des noms identiques mais des origines distinctes. Cela peut compliquer la sélection des éléments à l'aide de la méthode XmlDocument
de SelectSingleNode
.
Considérez cet extrait XML en utilisant l'attribut xmlns
pour définir l'espace de noms http://schemas.microsoft.com/developer/msbuild/2003
:
<code class="language-xml"><project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Compile include="clsWorker.cs"/> </ItemGroup> </project></code>
Une tentative naïve de récupérer l'élément <Compile>
:
<code class="language-csharp">XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(xml); XmlNode node = xmldoc.SelectSingleNode("//Compile");</code>
cèdera null
. En effet, l'expression XPath ignore les espaces de noms. La solution réside dans l'utilisation d'un XmlNamespaceManager
:
Pour sélectionner correctement l'élément <Compile>
dans le XML de l'espace de noms, utilisez un XmlNamespaceManager
pour mapper les espaces de noms aux préfixes :
<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>
Maintenant, SelectSingleNode
renverra avec précision l'élément <Compile>
, permettant l'accès à ses attributs et à ses nœuds enfants. Cette approche résout efficacement les collisions d'espaces de noms et permet une manipulation XML robuste.
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!