
Dépannage SelectSingleNode Retours nuls dans les documents XML avec espaces de noms
Lorsque vous travaillez avec des documents XML contenant des espaces de noms, l'utilisation de SelectSingleNode pour rechercher des nœuds spécifiques peut renvoyer de manière inattendue null. Cela se produit souvent lorsque l'élément cible se trouve dans un espace de noms qui n'est pas explicitement déclaré dans votre expression XPath.
Illustrons avec un exemple :
<code class="language-xml"><?xml version="1.0" encoding="utf-8"?>
<project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<itemgroup>
<compile include="clsWorker.cs"/>
</itemgroup>
</project></code>Si vous chargez ce XML dans un XmlDocument (par exemple, xmldoc), xmldoc.SelectSingleNode("//Compile") renverra null. En effet, l'élément compile se trouve dans l'espace de noms déclaré par xmlns. Supprimer l'attribut xmlns résoudrait le problème, mais ce n'est pas toujours une solution pratique.
La solution : utiliser XmlNamespaceManager
La bonne approche consiste à employer un XmlNamespaceManager avec SelectSingleNode. Cela vous permet de spécifier les préfixes d'espace de noms et leurs URI correspondants. Voici comment :
<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 utilisons ce gestionnaire dans l'appel SelectSingleNode. Cela identifie et récupère correctement le nœud compile. La clé utilise le préfixe msbld:Compile dans l'expression XPath pour référencer explicitement l'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!
Quelles sont les méthodes pour récupérer les données du serveur ?
Comment partager une imprimante dans Win10
Quels serveurs y a-t-il sur le Web ?
utilisation de la fonction date
Oracle ajoute une méthode de déclenchement
Comment utiliser les bugs de recherche
Patch d'adhésion Thunder
Comment nettoyer le lecteur C de votre ordinateur lorsqu'il est plein