我想通过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);
但这不起作用。
答案 0 :(得分:3)
我怀疑这是命名空间问题。您只是为feed
元素指定了名称空间,而不是entry
或link
。试试这个:
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中表达我正在寻找的内容(属性,元素等,以及适当的条件)。当然,您的里程可能会有所不同。