【问题标题】:Reading RSS feed with Linq-to-XML and C# - how to decode CDATA section?使用 Linq-to-XML 和 C# 读取 RSS 提要 - 如何解码 CDATA 部分?
【发布时间】:2010-12-16 01:24:58
【问题描述】:

我正在尝试使用 C# 和 Linq to XML 读取 RSS 提要。 提要以 utf-8 编码(请参阅http://pc03224.kr.hsnr.de/infosys/feed/),除了描述节点外,它通常可以正常读取,因为它包含在 CDATA 部分中。

由于某种原因,在读出“description”标签的内容后,我在调试器中看不到 CDATA 标签,但我想它一定在某个地方,因为只有在本节中,德语变音符号 (äöü) 和其他特殊字符显示不正确。相反,它们保留在编码为 ü 的字符串 utf-8 中。

我可以以某种方式正确地读出它们,或者至少在之后解码它们吗?

这是给我带来麻烦的 RSS 部分的示例:

<description><![CDATA[blabla bietet H&#246;rern meiner Vorlesungen &#8220;IAS&#8221;, &#8220;WEB&#8221; und &#8220;SWE&#8221; an, Lizenzen f&#252;r blabla [...]]]></description>

这是我读取并解析 RSS 提要数据的代码:

RssItems = (from xElem in xml.Descendants("channel").Descendants("item")
                            select new RssItem
                                       {
                                           Content =  xElem.Descendants("description").FirstOrDefault().Value,
                                           ...
                                       }).ToList();

提前致谢!

【问题讨论】:

    标签: c# encoding rss linq-to-xml cdata


    【解决方案1】:

    您的代码正在按预期工作。 CDATA 部分意味着不应解释内容,即不应将 "&amp;#246;" 视为 HTML 实体,而应将其视为字符序列。

    联系 RSS 提要的作者并告诉他修复它,方法是删除 CDATA 标记以便解释实体,或者将预期的字符直接放入 HTML 文件中。

    或者,查看HttpUtility.HtmlDecode 以再次解码 CDATA 内容。

    【讨论】:

    • 这对我们的项目来说不是问题。不过一般来说是个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2015-05-22
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多