我一直在尝试使用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);
我错过了什么?
答案 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;