我试图获取此xml Feed中每个条目的标题和链接
https://www.businessopportunities.ukti.gov.uk/alertfeed/businessopportunities.rss
设置断点我可以看到我收到所有条目但是当我尝试从条目中获取标题或链接时出现错误
XmlDocument rssXmlDoc = new XmlDocument();
rssXmlDoc.Load("https://www.businessopportunities.ukti.gov.uk/alertfeed/businessopportunities.rss");
var nsm = new XmlNamespaceManager(rssXmlDoc.NameTable);
nsm.AddNamespace("atom", "http://www.w3.org/2005/Atom");
XmlNodeList entries = rssXmlDoc.SelectNodes("/atom:feed/atom:entry", nsm);
foreach (XmlNode entry in entries)
{
var title = entry.SelectSingleNode("/atom:entry/atom:title", nsm).InnerText;
var link = entry.SelectSingleNode("/atom:entry/atom:link", nsm).InnerText;
}
答案 0 :(得分:1)
在XPath表达式中,前导/
表示应从文档的 root 节点开始计算表达式。这种表达式称为绝对路径表达式。你的第一个表达:
/atom:feed/atom:entry
应从根开始评估,但所有后续表达式都不应该。像
这样的表达式/atom:entry/atom:title
装置
从文档的根节点开始,然后查找最外面的元素
atom:entry
,然后选择名为atom:title
的子元素。
但显然,atom:entry
不是文档的最外层元素。
只需更改
var title = entry.SelectSingleNode("/atom:entry/atom:title", nsm).InnerText;
var link = entry.SelectSingleNode("/atom:entry/atom:link", nsm).InnerText;
到
var title = entry.SelectSingleNode("atom:title", nsm).InnerText;
var link = entry.SelectSingleNode("atom:link", nsm).InnerText;