Naviguer dans XML avec les espaces de noms : le SelectSingleNode
Dé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!