2

我有一个简单的 xml,我从中创建了一个 XmlDocument 并使用 Xpath 来获取一个节点,我需要将此节点传递给代码的其他部分,我可以在 XmlNode 对象上使用进一步的 xpath 函数来获取其他子节点。但是在下面的代码中

string xmlString = "<catalog><music><cds><cd><title>First Title</title><author>Author    1</author></cd><cd><title>Second Title</title><author>Author 2</author></cd></cds></music></catalog>";
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlString);
XmlNode musicNode = xmlDocument.SelectSingleNode("/catalog/music");
XmlNode cdsNode = musicNode.SelectSingleNode("/cds");

当我打印音乐节点的名称时,我得到了“音乐”,所以我假设我有“音乐”节点。所以我再次在音乐节点上应用 xpath 表达式“/cds”,假设我会得到“cds”XmlNode,但代码中的 cdsNode 返回未定义的值,但如果我这样做

XmlNode cdsNode = musicNode.SelectSingleNode("/catalog/music");

我再次获得了 cdsNode 的有效值,即“音乐”节点,我想 musicNode 代表 XmlDocument 而不是“音乐”XmlNode?我是否遗漏了什么,我来自 Java 并且在 Java 中使用 xpath 可以从 Node 导航到子节点,就像 musicNode 上的 xpath 表达式“/cds”会返回一个有效的 cdNode

4

1 回答 1

2

/ 将始终回到底层的根XmlDocument,而与当前节点无关。

放下/并导航相对路径,你应该很好,即

XmlNode musicNode = xmlDocument.SelectSingleNode("/catalog/music");
XmlNode cdsNode = musicNode.SelectSingleNode("cds");

或者只是再次走整条路

XmlNode cdsNode = xmlDocument.SelectSingleNode("/catalog/music/cds");
于 2012-09-11T13:39:12.180 回答