使用XPath从XML获取名称空间中的所有条目元素
问题描述:
我试图获取所有条目元素,以便我可以显示它们,但是我还没有做过一段时间的Xpath,但我认为它会相当简单。到目前为止 - rssNodes计数为0,我错过了什么?使用XPath从XML获取名称空间中的所有条目元素
XmlDocument rssXmlDoc = new XmlDocument();
rssXmlDoc.Load("http://www.businessopportunities.ukti.gov.uk/alertfeed/1425362.rss");
var rssNodes = rssXmlDoc.SelectNodes("feed/entry");
XML文件的结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<!-- some other child elements -->
<entry>
<!-- child elements -->
</entry>
<entry>
<!-- child elements -->
</entry>
<!-- more entry elements -->
<!-- some other child elements -->
</feed>
答
您需要正确使用命名空间:
var nsm = new XmlNamespaceManager(rssXmlDoc.NameTable);
nsm.AddNamespace("atom", "http://www.w3.org/2005/Atom");
var entries = rssXmlDoc.SelectNodes("/atom:feed/atom:entry", nsm);
+0
谢谢!关键是命名空间....我需要做一些阅读:-) – 2015-04-02 12:08:01
答
你需要尊重与XPath的XML命名空间。
注意:如果entry
元素的名称空间已知,请参阅JLRishe的答案,在这种情况下更优雅。
如果你不知道XML命名空间事先你也可以忽略使用它的XPath的内置local-name()
功能:
SelectNodes("//*[local-name()='entry']")
这将让整个XML文档中的所有元素entry
,无论哪个元素所属的名称空间。
你能告诉你的XML? – 2015-04-02 11:42:34
请点击链接> http://www.businessopportunities.ukti.gov.uk/alertfeed/1425362.rss – 2015-04-02 11:44:01
[哪个xpath表达式允许我选择这些节点?](http://stackoverflow.com/问题/ 14370989/which-xpath-expression-will-allow-me-to-select-these-nodes) – JLRishe 2015-04-02 11:57:58