XmlNode上的SelectSingleNode方法返回未定义的值

时间:2012-09-11 13:36:30

标签: .net xpath

我有一个简单的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");

当我打印出musicNode的名字时,我正在收听&#34;音乐&#34;,所以我假设我有&#34;音乐&#34;节点。所以我再次应用了xpath表达式&#34; / cds&#34;在音乐节点上假设我会得到&#34; cds&#34; XmlNode,但代码中的cdsNode返回未定义的值,但如果我这样做

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

我得到了cdsNode的有效值,即&#34;音乐&#34;节点再次,我想musicNode代表XmlDocument而不是&#34;音乐&#34; XmlNode的???我错过了什么,我来自Java和Java,可以使用xpath导航到Node的子节点,就像xpath表达式&#34; / cds&#34;在musicNode上会返回一个有效的cdNode

1 个答案:

答案 0 :(得分:2)

无论当前节点如何,

/将始终返回到基础XmlDocument的根目录。

放弃/并导航相对路径,你应该是好的,即

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

或者只是走完整条路径

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