我正在使用RSS源,文档中包含一个特殊字符»
我猜测Feed没有正确编码,但我无法改变它。我想要覆盖它,或者只是用友好的东西替换有问题的字符。
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 :(得分:6)
»
是HTML named entity,XML不支持。开箱即用,XML only supports &
,'
,"
,>
和<
。
使用相应的数字实体»
(或十六进制»
)。
答案 1 :(得分:1)
+1弗雷德里克说的话。您也可以将»
作为原始未转义字符提供服务,大概以UTF-8编码。
如果是其他人的RSS源,您需要踢它们以停止生成格式错误的XML;没有XML解析器会读这个。
在<description>
元素中,HTML内容通常应该是XML转义的。因此,如果项目的描述是This is a <em>really</em> interesting article
,它应该在XML中显示为:
<description>This is a <em>really</em> interesting article</description>
因此,HTML编码的»
字符应该是
&raquo;
如果它直接来自HTML源而未被转义,则这是一个更严重的XML注入问题。
(这是假设RSS 2.0。在各种早期版本的RSS中,<description>
包含HTML或纯文本是否因规格而异,有时完全没有指定。对于旧的RSS版本,它并不真正可靠完全使用HTML内容。)