2009-11-12 73 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