Maison > développement back-end > C++ > Comment l'espace de noms XML affecte-t-il « SelectSingleNode » et comment puis-je sélectionner correctement les nœuds ?

Comment l'espace de noms XML affecte-t-il « SelectSingleNode » et comment puis-je sélectionner correctement les nœuds ?

Susan Sarandon
Libérer: 2025-01-07 20:59:42
original
186 Les gens l'ont consulté

How Does XML Namespace Affect `SelectSingleNode` and How Can I Correctly Select Nodes?

Naviguer dans XML avec les espaces de noms : le SelectSingleNodeDéfi

Lorsque vous travaillez avec des documents XML contenant des espaces de noms, la méthode SelectSingleNode standard de .NET peut se comporter de manière inattendue. En effet, une simple expression XPath telle que //Compile ne comprend pas intrinsèquement les espaces de noms.

Illustrons avec un exemple :

<code class="language-xml"><project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <itemgroup>
    <compile include="clsWorker.cs"/>
  </itemgroup>
</project></code>
Copier après la connexion

Tenter de sélectionner le nœud <compile> à l'aide de xmldoc.SelectSingleNode("//Compile") renverra null. La déclaration de l'espace de noms xmlns="http://schemas.microsoft.com/developer/msbuild/2003" est la coupable.

La solution : exploiter la puissance de XmlNamespaceManager

La clé pour sélectionner correctement les nœuds dans le XML à espace de noms est d'utiliser la classe XmlNamespaceManager. Cette classe vous permet de définir explicitement les préfixes d'espace de noms et leurs URI correspondants.

Voici comment modifier votre code :

<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>
Copier après la connexion

Nous créons un XmlNamespaceManager, ajoutons un mappage d'espace de noms ("msbld" comme préfixe pour l'URI spécifié), puis transmettons ce gestionnaire à SelectSingleNode. L'expression XPath //msbld:Compile identifie désormais correctement le nœud dans l'espace de noms défini. Cette approche garantit une sélection précise des nœuds, même dans des structures XML complexes avec espace de noms.

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!

source:php.cn
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