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
Susan Sarandonoriginal
2025-01-07 20:59:42199parcourir

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>

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>

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!

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