首页 > 后端开发 > C++ > 为什么在处理 XML 命名空间时 SelectSingleNode 返回 Null?

为什么在处理 XML 命名空间时 SelectSingleNode 返回 Null?

Barbara Streisand
发布: 2025-01-07 21:03:48
原创
393 人浏览过

Why Does SelectSingleNode Return Null When Dealing with XML Namespaces?

故障排除 SelectSingleNode 具有命名空间的 XML 文档中的 Null 返回

使用包含命名空间的 XML 文档时,使用 SelectSingleNode 查找特定节点可能会意外返回 null。当目标元素位于未在 XPath 表达式中显式声明的命名空间内时,通常会发生这种情况。

我们举个例子来说明一下:

<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>
登录后复制

如果将此 XML 加载到 XmlDocument(例如 xmldoc)中,xmldoc.SelectSingleNode("//Compile") 将返回 null。这是因为 compile 元素位于 xmlns 声明的命名空间内。 删除 xmlns 属性可以解决该问题,但这并不总是一个实用的解决方案。

解决方案:使用XmlNamespaceManager

正确的方法是使用 XmlNamespaceManagerSelectSingleNode。这允许您指定名称空间前缀及其相应的 URI。 方法如下:

<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>
登录后复制

我们创建一个 XmlNamespaceManager,添加命名空间映射(“msbld”作为指定 URI 的前缀),然后在 SelectSingleNode 调用中使用此管理器。 这可以正确识别并检索 compile 节点。 关键是在 XPath 表达式中使用前缀 msbld:Compile 来显式引用命名空间。

以上是为什么在处理 XML 命名空间时 SelectSingleNode 返回 Null?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板