2009-11-12 74 views
0

我想读取使用C#和Linq到XML的RSS源。 Feed以utf-8编码(请参阅http://pc03224.kr.hsnr.de/infosys/feed/),除了description节点之外,通常将其正常工作,因为它被封装在CDATA节中。使用Linq-to-XML和C#读取RSS提要 - 如何解码CDATA部分?

由于某种原因,在读取“description”标记的内容后,我无法在调试器中看到CDATA标记,但我想它一定在某处,因为只有在本节中,德语Umlaute(äöü)和其他特殊字符未正确显示。相反,它们保留在编码为ü的字符串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(); 

谢谢!

回答

2

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

请联系RSS源的作者,并告诉他通过删除CDATA标记以便实体解释,或者将预期的字符直接放入HTML文件来修复它。

或者,查看HttpUtility.HtmlDecode来第二次解码CDATA内容。

+0

解码这种CDATA的一种更好的方法可能是在片段模式中使用'StringReader'中包含的内容的'XmlReader' - 这将消除对ASP.NET程序集的依赖。 – 2009-11-12 22:20:18

+0

这对我们的项目不是问题。一般来说,一个好主意。 – Shackles 2009-11-12 22:56:04