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

Getting all entry Elements within a Namespace from XML using XPath

我正在尝试获取所有条目元素以便我可以显示它们,有一段时间没有使用 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>

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

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

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

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

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

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

var nsm = new XmlNamespaceManager(rssXmlDoc.NameTable);
nsm.AddNamespace("atom", "http://www.w3.org/2005/Atom");

var entries = rssXmlDoc.SelectNodes("/atom:feed/atom:entry", nsm);