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 ?

Comment puis-je résoudre les collisions d'espaces de noms lors de l'utilisation de SelectSingleNode avec XmlDocument ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-07 20:56:41300parcourir

How Can I Resolve Namespace Collisions When Using SelectSingleNode with 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!

Déclaration:
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