0

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

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

错误很简单,我传递了一个启用的XMLReaderSettings对象。DtdProcessing但随后出现了以下情况:

System.Xml.dll 中出现“System.Xml.XmlException”类型的未处理异常附加信息:“;” 字符,十六进制值 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);

我错过了什么?

4

2 回答 2

0

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

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

ASCII 符号和标点符号以及相当大的一组 Unicode 符号字符被排除在名称之外

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

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

于 2015-06-18T17:24:51.743 回答
0

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

settings.DtdProcessing = DtdProcessing.Ignore;
于 2015-06-19T13:56:08.577 回答