所以我有一个相当简单的RSS,我正在下载然后使用XmlSerializer进行反序列化。由于一些奇怪的原因,我无法弄清楚,在报告问题之后,RSS的所有者在几个月后还没有修复。
这是RSS中的格式错误的项目:
<item>
<guid isPermaLink="false">TopicID_441307</guid>
<link>https://forums.eveonline.com/default.aspx?g=posts&t=441307</link>
<author>Malycia Kiss</author>
<title>WTB Freighter / JF Pilot with PI</title>
<description><a href=https://forums.eveonline.com/default.aspx?g=posts&m=5976122#post5976122 >Go to last post</a>gt; 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.
问题!
如果这些已清理的字符包含在适当的元素中,为什么它会关注格式错误的URL编码字符串?
这是因为XmlSerializer试图将这些编码值恢复为原始字符吗?
处理此问题的最佳方法是什么?请记住,我在每个RSS提要上只遇到过一次或两次此类问题,而且仅用于&amp; gt和&lt; lt编码 - 所以可能只是一个简单的查找/替换?
很抱歉,如果我在解释时使用了错误的条款。
提前感谢您的帮助!
答案 0 :(得分:1)
您正在处理XML元素中的HTML内容。
它看起来正确编码,解码应该是自动的。但是你的片段确实“格式错误”,这是大多数Xml读者拒绝处理的条件 - 他们只是抛出一个错误。
- 处理此问题的最佳方法是什么?
醇>
在加载XML之前,您必须修复它。在这种情况下,
rssText = rssText.Replace("/a>gt;" , "/a>");
应该这样做。然后,<description>
的值应该被视为有效的HTML。