Maison > développement back-end > C++ > Pourquoi SelectSingleNode renvoie-t-il null lorsqu'il s'agit d'espaces de noms XML ?

Pourquoi SelectSingleNode renvoie-t-il null lorsqu'il s'agit d'espaces de noms XML ?

Barbara Streisand
Libérer: 2025-01-07 21:03:48
original
394 Les gens l'ont consulté

Why Does SelectSingleNode Return Null When Dealing with XML Namespaces?

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

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

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