使用Linq-to-XML和C#读取RSS提要 - 如何解码CDATA部分?

时间:2009-11-12 20:31:12

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

我正在尝试使用C#和Linq to XML读取RSS源。 feed以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();

提前致谢!

1 个答案:

答案 0 :(得分:2)

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

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

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