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