【问题标题】:Using Xpath to get Element from XmlNode使用 Xpath 从 XmlNode 获取元素
【发布时间】:2015-04-02 12:50:30
【问题描述】:

我正在尝试获取此 xml 提要中每个条目的标题和链接

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;
}

【问题讨论】:

    标签: c# xml xpath xmldocument


    【解决方案1】:

    在 XPath 表达式中,前导 / 表示应该从文档的 节点开始计算表达式。这种表达式称为绝对路径表达式。你的第一个表情:

    /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;
    

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 1970-01-01
      • 2019-03-02
      • 2016-01-19
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      相关资源
      最近更新 更多