因此,我尝试使用 System.XML 使用 C# 解析以下 XML 文档:
<root xmlns:n="http://www.w3.org/TR/html4/">
<n:node>
<n:node>
data
</n:node>
</n:node>
<n:node>
<n:node>
data
</n:node>
</n:node>
</root>
每一篇带有名称空间的 XPath 论文都告诉我要执行以下操作:
XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable);
mgr.AddNamespace("n", "http://www.w3.org/1999/XSL/Transform");
添加上面的代码后,查询
xmlDoc.SelectNodes("/root/n:node", mgr);
运行正常,但没有返回任何内容。下列:
xmlDoc.SelectNodes("/root/node", mgr);
如果我修改 XML 文件并删除命名空间,则会返回两个节点,因此看起来其他所有内容都设置正确。知道为什么它不适用于命名空间吗?
多谢!
如前所述,重要的是命名空间的 URI,而不是前缀。
鉴于您的 xml,您可以使用以下内容:
mgr.AddNamespace( "someOtherPrefix", "http://www.w3.org/TR/html4/" );
var nodes = xmlDoc.SelectNodes( "/root/someOtherPrefix:node", mgr );
这将为您提供所需的数据。一旦掌握了这个概念,事情就会变得更容易,特别是当您使用默认名称空间(源 xml 中没有前缀)时,因为您立即知道可以为每个 URI 分配一个前缀,并强烈引用您喜欢的文档的任何部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)