【问题标题】:XMLException when processing RSS处理 RSS 时出现 XMLException
【发布时间】:2015-06-18 16:53:19
【问题描述】:

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

附加信息:出于安全原因,此处禁止使用 DTD XML 文档。要启用 DTD 处理,请设置 DtdProcessing 属性 在 XmlReaderSettings 上解析并将设置传递到 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);

我错过了什么?

【问题讨论】:

  • 您提供的链接已成功验证。如果不是此链接,请发布生成您发布的确切异常消息的提要链接。
  • 这是奇怪的部分,我提供的提要是有效的,但这是导致错误的原因。
  • 你能再次运行你的代码吗?可能是提要更新了,非法部分消失了?
  • 你说得对,这个错误消失了,但是在使用 Argotic 时又出现了另一个错误,我会尽快更新我的问题。

标签: c# xml rss argotic


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 请注意,这是对最初提出的问题的回答。
  • 谢谢。你对我目前的问题有什么想法吗?我无处可去。
【解决方案2】:

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

settings.DtdProcessing = DtdProcessing.Ignore;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多