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
Libérer: 2025-01-07 20:56:41
original
376 Les gens l'ont consulté

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 :

<project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Compile include="clsWorker.cs"/>
  </ItemGroup>
</project>
Copier après la connexion

Une tentative naïve de récupérer l'élément <Compile> :

XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(xml);
XmlNode node = xmldoc.SelectSingleNode("//Compile");
Copier après la connexion

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 :

XmlNamespaceManager ns = new XmlNamespaceManager(xmldoc.NameTable);
ns.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003");
XmlNode node = xmldoc.SelectSingleNode("//msbld:Compile", ns);
Copier après la connexion

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