【问题标题】:Parsing RSS feed from XML document从 XML 文档解析 RSS 提要
【发布时间】:2021-06-23 11:06:22
【问题描述】:

我正在尝试阅读 RSS 提要,但无法正常工作。我试图从 td 标记中获取内容,但代码在解析表行时总是抛出 NullReferenceException。任何帮助表示赞赏。 代码:

    public void readRss()
    {
        string Url = "mylink.com";
        HtmlWeb web = new HtmlWeb();
        HtmlDocument doc = web.Load(Url);
        var table = doc.DocumentNode.SelectSingleNode("//table");
        var rows = table.SelectNodes("//tr");
        if (rows != null && rows.Count > 0)
        {
            foreach (var row in rows)
            {
                var cells = row.SelectNodes("//td");
                //do stuff
                
            }
        } 
    }
               
        

XML 文件格式如下:

    <![CDATA[<table>
        <tr>
            <td>Name</td>
            <td>LastName</td>
            <td>Age</td>
       <tr>
    </table>
    ]]>

【问题讨论】:

  • always throws NullReferenceException while parsing table rows 发生在哪一行?您的变量table 是否包含任何内容或者是null?如果你取回table 的一个节点,你的变量rows 包含什么?
  • @Codexer 它发生在我有用于解析行的代码的同一行。我试过调试,表似乎也为空:(
  • 您是否尝试使用任何提供此功能的现有 Nuget 包来阅读 RSS 提要?由于我们不知道您想阅读哪个 URL,我们无法验证内容是否与您所说的完全一致。通过使用我们知道它可以工作的包,您至少可以验证该链接是否提供了可读的 RSS 提要。
  • 您只发布了回复的一部分。里面的 CDATA 是 HTML 响应的 XML 响应吗?在提取 CDATA 数据之前,您首先必须获取父元素。
  • 我通过将文件的内容下载到字符串来解决了这个问题。除了获取 xml 文件之外,我没有替换任何代码并且它运行良好:/ 我仍然需要删除CDATA,以前没有帮助。

标签: c# html xml


【解决方案1】:

您的 web.Load(Url) 是否响应示例 XML 文件示例?如果是这样,那么在 CDATA 中选择节点将根本不起作用。 CDATA[...] 中的内容仅被视为文本,其内容都不会构成文档节点树的一部分。因此,您的第一个 SelectSingleNode("//table") 将始终为您提供空结果。
顺便说一句:您应该在设置 table 和 doc 变量后测试 null 值,就像对行一样。这两个,都可以返回null。

【讨论】:

  • 删除 CDATA 也没有帮助。我必须将文件下载到字符串,删除 CDATA,然后我的代码才能完美运行。按照这个答案使用 Streams 也有效:stackoverflow.com/a/10152191/12539617 仍然不知道问题出在哪里。编码似乎不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 2012-11-08
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多