我正在尝试获取所有的入口元素,所以我可以显示它们,还没有完成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>
答案 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
元素,无论该元素属于哪个名称空间。