处理 RSS 时的 XMLException

本文关键字:XMLException 时的 RSS 处理 | 更新日期: 2023-09-27 17:57:03

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

附加信息:出于安全原因,此处禁止使用 DTD XML 文档。启用 DTD 处理设置"DtdProcessing "属性 在 XmlReader 上要分析的设置并将设置传递给 XmlReader.Create 方法。

错误很简单,我传递了一个启用了DtdProcessingXMLReaderSettings对象。但随后出现了以下内容:

类型为"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);

我错过了什么?

处理 RSS 时的 XMLException

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

鼓励文档作者使用有意义的名称 自然语言中的单词或单词组合,并避免 名称中的符号字符或空格字符。请注意,冒号, 连字符减号、句号(句点)、低线(下划线)和中间 DOT 是明确允许的。

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

由于其他RSS读者也抱怨提要可能无效。但是,在撰写本文时,W3C 验证器显示它是有效的!

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

似乎忽略DtdProcessing解决了我的问题。

settings.DtdProcessing = DtdProcessing.Ignore;