2015-08-21 53 views
1

所以我有一個相當簡單的RSS,我正在下載,然後使用XmlSerializer進行反序列化。由於某些奇怪的原因,我無法弄清楚,也沒有在報告問題之後,RSS的擁有者在數月後還沒有修復。由於格式錯誤的XML導致反序列化XML

這是RSS的格式不正確項:

<item> 
    <guid isPermaLink="false">TopicID_441307</guid> 
    <link>https://forums.eveonline.com/default.aspx?g=posts&amp;t=441307</link> 
    <author>Malycia Kiss</author> 
    <title>WTB Freighter/JF Pilot with PI</title> 
    <description>&lt;a href=https://forums.eveonline.com/default.aspx?g=posts&amp;m=5976122#post5976122 &gt;Go to last post&lt;/a&gtgt; by</description> 
    <a10:updated>2015-08-18T17:33:40Z</a10:updated> 
</item> 

的格式不正確的部分是在描述元素由於& GTGT,這是剛剛應該是& GT - 再次,我不知道爲什麼他們的RSS將額外的字符放在那裏。

反序列化的時候,我得到一個錯誤:

Unexpected node type EntityReference. ReadElementString method can only be called on elements with simple or empty content. Line 3231, position 130. 

的問題!

  1. 如果這些消毒字符都包含一個適當的元素中,它爲什麼關心,如果有編碼字符串格式不正確的網址是什麼?

  2. 這是因爲XmlSerializer試圖將這些編碼值恢復爲原始字符?

  3. 處理這個問題的最佳方法是什麼?請記住,我只在一個或兩個RSS問題上遇到這種類型的問題,並且只適用於& gt和& lt編碼 - 所以也許只是一個簡單的查找/替換?

對不起,如果我在解釋這個時使用了錯誤的術語。

在此先感謝您的幫助!

回答

1

您正在處理XML元素中的HTML內容。

它看起來正確編碼和解碼應該是自動的。但是你的片段確實是「畸形」的,這是大多數Xml讀者拒絕處理的一個條件 - 他們只是拋出一個錯誤。

  1. What is the best way to handle this?

您必須在加載之前修復XML。在這種情況下,

rssText = rssText.Replace("/a&gtgt;" , "/a&gt;"); 

應該這樣做。 <description>的值應該被視爲有效的HTML。

+0

有沒有辦法在反序列化過程中'關閉'這種HTML自動解碼?我只是感到困惑,爲什麼它會自動執行它,而不是僅僅返回字符串而是拋出一個錯誤。 – Josh

+0

搜索字符串開始處的/ a表示什麼? – Josh

+0

'/ a'來自正在關閉的''標籤。原始文本'>gt;'是錯誤的 - 它看起來像生成器中的錯誤。在RSS世界中並不罕見。 –