2015-04-02 128 views
0

我试图获取所有条目元素,以便我可以显示它们,但是我还没有做过一段时间的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> 
+0

你能告诉你的XML? – 2015-04-02 11:42:34

+0

请点击链接> http://www.businessopportunities.ukti.gov.uk/alertfeed/1425362.rss – 2015-04-02 11:44:01

+0

[哪个xpath表达式允许我选择这些节点?](http://stackoverflow.com/问题/ 14370989/which-xpath-expression-will-allow-me-to-select-these-nodes) – JLRishe 2015-04-02 11:57:58

回答

3

您需要正确使用命名空间:

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

0

你需要尊重与XPath的XML命名空间。

注意:如果entry元素的名称空间已知,请参阅JLRishe的答案,在这种情况下更优雅。

如果你不知道XML命名空间事先你也可以忽略使用它的XPath的内置local-name()功能:

SelectNodes("//*[local-name()='entry']") 

这将让整个XML文档中的所有元素entry,无论哪个元素所属的名称空间。