Чтение RSS-ленты с Linq-to-XML и C # - как декодировать раздел CDATA? - PullRequest
0 голосов
/ 12 ноября 2009

Я пытаюсь прочитать RSS-канал, используя C # и Linq to XML. Канал закодирован в utf-8 (см. http://pc03224.kr.hsnr.de/infosys/feed/), и его чтение обычно работает нормально, за исключением узла описания, поскольку он заключен в раздел CDATA.

По какой-то причине я не вижу тег CDATA в отладчике после считывания содержимого тега "description", но я предполагаю, что он должен быть где-то там, потому что только в этом разделе немецкий 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();

Заранее спасибо!

1 Ответ

2 голосов
/ 13 ноября 2009

Ваш код работает как задумано. Раздел CDATA означает, что содержимое не должно интерпретироваться, то есть "&#246;" не должно рассматриваться как объект HTML, а только как последовательность символов.

Свяжитесь с автором RSS-канала и скажите, чтобы он исправил это, либо удалив теги CDATA для интерпретации сущностей, либо поместив нужные символы непосредственно в файл HTML.

В качестве альтернативы взгляните на HttpUtility.HtmlDecode для повторного декодирования содержимого CDATA.

...