使用 xpath 访问具有命名空间的子节点
Posted
技术标签:
【中文标题】使用 xpath 访问具有命名空间的子节点【英文标题】:Access Child nodes with namespace using xpath 【发布时间】:2021-07-09 12:12:00 【问题描述】:如何使用 Xpath 读取子笔记的内容?
我已经试过了:
var xml = new XmlDocument();
xml.Load("server-status.xml");
var ns = new XmlNamespaceManager(xml.NameTable);
ns.AddNamespace("ns", "namespace");
var node = xml.SelectSingleNode("descendant::ns:server[ns:ip-address]", ns)
Console.WriteLine(node.InnerXml)
但我只得到这样的字符串:
<ip-address>127.0.0.50</ip-address><name>Server 1</name><group>DATA</group>
如何单独获取值?
Xml 文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<server-status xmlns="namespace">
<server>
<ip-address>127.0.0.50</ip-address>
<name>Server 1</name>
<group>DATA</group>
</server>
</server-status>
【问题讨论】:
【参考方案1】:您在 XPath 中正确使用了 XML 命名空间。
但是,您原来的 XPath,
descendant::ns:server[ns:ip-address]
表示要选择所有带有ns:ip-address
子元素的ns:server
元素。
如果您希望自己选择 ns:ip-address
孩子,请改为使用
descendant::ns:server/ns:ip-address
同样,您可以选择ns:name
或ns:group
元素。
【讨论】:
以上是关于使用 xpath 访问具有命名空间的子节点的主要内容,如果未能解决你的问题,请参考以下文章