加载xml文档失败,具有特殊字符»

时间:2010-11-09 05:50:15

标签: c# xml unicode rss

我正在使用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

...

2 个答案:

答案 0 :(得分:6)

&raquo;HTML named entity,XML不支持。开箱即用,XML only supports &amp;&apos;&quot;&gt;&lt;

使用相应的数字实体&#187;(或十六进制&#xbb;)。

答案 1 :(得分:1)

+1弗雷德里克说的话。您也可以将»作为原始未转义字符提供服务,大概以UTF-8编码。

如果是其他人的RSS源,您需要踢它们以停止生成格式错误的XML;没有XML解析器会读这个。

<description>元素中,HTML内容通常应该是XML转义的。因此,如果项目的描述是This is a <em>really</em> interesting article,它应该在XML中显示为:

<description>This is a &lt;em>really&lt;/em> interesting article</description>

因此,HTML编码的»字符应该是

&amp;raquo;

如果它直接来自HTML源而未被转义,则这是一个更严重的XML注入问题。

(这是假设RSS 2.0。在各种早期版本的RSS中,<description>包含HTML或纯文本是否因规格而异,有时完全没有指定。对于旧的RSS版本,它并不真正可靠完全使用HTML内容。)