由于格式错误 XML,反序列化 XML 时出错

Error Deserializing XML due to malformed XML

所以我有一个相当简单的 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>

由于 >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 提要,我只对此类问题 运行 过一次或两次,并且仅针对 > 和 < 编码 - 所以也许只是一个简单的 find/replace?

抱歉,如果我在解释时使用了错误的术语。

在此先感谢您的帮助!

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

它看起来编码正确,解码应该是自动的。但是您的片段确实是 "malformed",这是大多数 Xml 读者拒绝处理的情况 - 他们只是抛出一个错误。

  1. What is the best way to handle this?

您必须先修复 XML 才能加载它。在这种情况下,

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

应该这样做。 <description> 的值应该读作有效 HTML.