2010-11-09 38 views
2

我消耗了RSS源,並在文檔中包含特殊字符»加載XML文檔失敗,特殊字符»

我猜飼料不正確編碼,但我不能改變的。我想重寫一下,或者只是用友好的東西替換冒犯的字符。

using (Stream stream = response.GetResponseStream()) 
     { 

      using (XmlReader reader = XmlReader.Create(stream)) 
      { 
       try 
       { 
        XmlDocument xmlDoc = new XmlDocument(); 
        xmlDoc.Load(reader); //<--- FAILS HERE 
        //parse the items of the feed 

...

+0

你可以檢查這個帖子 [http://stackoverflow.com/questions/700686/an-error-occurred-while-parsing-entityname](http://stackoverflow.com/questions/700686/an-error-occurrence-while-parsing-entityname) – 2011-01-11 16:11:06

回答

6

&raquo;HTML named entity和XML不支持。開箱即用,XML only supports&amp;,&apos;, &quot;,&gt;&lt;

改爲使用相應的數字實體&#187;(或十六進制&#xbb;)。

1

+1Frédéric說的。您還可以將»作爲原始未轉義字符提供,大概以UTF-8編碼。

如果是別人的RSS提要,您需要啓動它們以停止生成格式不正確的XML;沒有XML解析器會讀這個。

<description>元素中,HTML內容通常應該是XML轉義的。因此,如果項目的描述是This is a <em>really</em> interesting article,它應該出現在XML爲:

<description>This is a &lt;em>really&lt;/em> interesting article</description> 

因此,HTML編碼»字符應該站出來爲

&amp;raquo; 

如果有人直接計入從一個HTML源代碼不被轉義,這是一個更嚴重的XML注入問題。

(這是假定的RSS 2.0在各種早期版本的RSS中,<description>是否包含HTML或純文本從規範到規範各不相同,並且有時完全沒有指定。對於舊的RSS版本,使用HTML內容並不可靠)

+0

我想我們應該踢谷歌爲這些問題抽出RSS 2然後:http://feeds.feedburner.com/robinsloan – Nariman 2012-03-27 17:06:33