【问题标题】:Getting all entry Elements within a Namespace from XML using XPath使用 XPath 从 XML 获取命名空间中的所有条目元素
【发布时间】:2015-04-02 11:41:14
【问题描述】:

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

【问题讨论】:

标签: c# xml xpath xmldocument


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2013-02-18
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      相关资源
      最近更新 更多