选择带有xpath的节点

时间:2013-12-06 18:34:50

标签: c# xml xpath

我想通过xpath找到xml的深层链接,并且还有一个名称空间。目前我有:

XmlNode link = xmlDoc
    .SelectSingleNode("dn:feed", nsmgr)
    .SelectSingleNode("dn:entry", nsmgr)
    .SelectSingleNode("dn:link", nsmgr);

这样可以正常工作,但由于路径很长,我只想使用xpath之类的:

XmlNode link = xmlDoc.SelectSingleNode("dn:feed/entry/link", nsmgr);

但这不起作用。

1 个答案:

答案 0 :(得分:3)

我怀疑这是命名空间问题。您只是为feed元素指定了名称空间,而不是entrylink。试试这个:

XmlNode link = xmlDoc.SelectSingleNode("dn:feed/dn:entry/dn:link", nsmgr);

就个人而言,如果可能的话,我会使用LINQ to XML--除了通常比XmlDocument更好的API之外,它还可以很容易地使用命名空间:

XDocument doc = ...;
XNamespace dn = "...";
XElement link = doc.Element(dn + "feed")
                   .Element(dn + "entry")
                   .Element(dn + "link");

我更喜欢在代码中而不是在XPath中表达我正在寻找的内容(属性,元素等,以及适当的条件)。当然,您的里程可能会有所不同。