使用XPath从XML获取命名空间中的所有条目元素

时间:2015-04-02 11:41:15

标签: c# xml xpath xmldocument

我正在尝试获取所有的入口元素,所以我可以显示它们,还没有完成Xpath一段时间,但我认为这将是相当简单的继承人到目前为止 - rssNodes计数是0,我是什么丢失?

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>

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您需要使用XPath来尊重XML命名空间。

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

如果您事先不知道XML命名空间,也可以使用XPath内置local-name()函数忽略它:

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

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