错误由于格式错误的XML而反序列化XML

时间:2015-08-21 07:19:14

标签: c# xml-serialization

所以我有一个相当简单的RSS,我正在下载然后使用XmlSerializer进行反序列化。由于一些奇怪的原因,我无法弄清楚,在报告问题之后,RSS的所有者在几个月后还没有修复。

这是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>

格式错误的部分位于description元素中,因为&amp; gtgt,这应该是&amp; gt - 再次,我不知道为什么他们的RSS会在那里添加额外的字符。

反序列化时,出现错误:

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

问题!

  1. 如果这些已清理的字符包含在适当的元素中,为什么它会关注格式错误的URL编码字符串?

  2. 这是因为XmlSerializer试图将这些编码值恢复为原始字符吗?

  3. 处理此问题的最佳方法是什么?请记住,我在每个RSS提要上只遇到过一次或两次此类问题,而且仅用于&amp; gt和&lt; lt编码 - 所以可能只是一个简单的查找/替换?

  4. 很抱歉,如果我在解释时使用了错误的条款。

    提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您正在处理XML元素中的HTML内容。

它看起来正确编码,解码应该是自动的。但是你的片段确实“格式错误”,这是大多数Xml读者拒绝处理的条件 - 他们只是抛出一个错误。

  
      
  1. 处理此问题的最佳方法是什么?
  2.   

在加载XML之前,您必须修复它。在这种情况下,

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

应该这样做。然后,<description>的值应该被视为有效的HTML。