我有一个简单的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
答案 0 :(得分:2)
/将始终返回到基础XmlDocument
的根目录。
放弃/
并导航相对路径,你应该是好的,即
XmlNode musicNode = xmlDocument.SelectSingleNode("/catalog/music");
XmlNode cdsNode = musicNode.SelectSingleNode("cds");
或者只是走完整条路径
XmlNode cdsNode = xmlDocument.SelectSingleNode("/catalog/music/cds");