处理RSS时的XMLException

时间:2015-06-18 16:53:19

标签: c# xml rss argotic

我一直在尝试使用Argotic为我的新闻阅读器应用程序处理RSS提要。对于他们中的大多数,它工作正常,但在某些Feed(like this)上它会断开以下内容:

  

其他信息:出于安全考虑,禁止使用DTD   XML文档。要启用DTD处理,请设置DtdProcessing属性   在XmlReaderSettings上解析并将设置传递给   XmlReader.Create方法。

错误很简单,我通过XMLReaderSettings对象并启用了DtdProcessing。但随后出现了以下内容:

  

发生了'System.Xml.XmlException'类型的未处理异常   System.Xml.dll附加信息:';'字符,十六进制   值0x3B,不能包含在名称中。第9行,第366位。

我正在使用的代码:

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.IgnoreComments = true;
    settings.IgnoreWhitespace = true;
    settings.DtdProcessing = DtdProcessing.Parse;

    XmlReader reader = XmlReader.Create(this.url, settings);
    RssFeed feed = new RssFeed();
    feed.Load(reader);

我错过了什么?

2 个答案:

答案 0 :(得分:0)

例外情况是告诉您RSS提要是非法的 - 具体而言,名称包含;字符。 W3C specification似乎禁止这样做:

  

鼓励文档作者使用有意义的名称   自然语言中的单词或单词组合,并避免   名称中的符号或空格字符。请注意,COLON,   HYPHEN-MINUS,FULL STOP(句号),LOW LINE(下划线)和MIDDLE   明确允许DOT。

     

ASCII符号和标点符号,以及相当大的   一组Unicode符号字符从名称中排除

由于其他RSS阅读器也抱怨该Feed可能无效。但在撰写本文时,W3C验证器shows it to be valid

根据XmlReaderSettings.ConformanceLevel的MSDN文档,此问题会导致ConformanceLevel的异常,但您可能会在XmlReaderSettings中找到可以关闭此行为的其他设置(提供设置为XmlReader.Create)。否则,如果无法修复Feed,则必须对其执行一些预处理。

答案 1 :(得分:0)

似乎无视DtdProcessing解决了我的问题。

settings.DtdProcessing = DtdProcessing.Ignore;