【问题标题】:Reading RSS problem - Expected DTD markup was not found读取 RSS 问题 - 未找到预期的 DTD 标记
【发布时间】:2009-09-30 21:48:57
【问题描述】:

我正在打开引用 DTD 的 XML 文件,如下所示:

<?xml version="1.0" encoding="windows-1250"?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"
     "http://my.netscape.com/publish/formats/rss-0.91.dtd">

这是C#代码的一部分:

public static XmlDocument FromUri(string uri) 
 {

    XmlDocument xmlDoc;
    WebClient webClient = new WebClient();

    using (Stream rssStream = webClient.OpenRead(uri))
    {
        XmlTextReader reader = new XmlTextReader(rssStream);
        xmlDoc = new XmlDocument();
        xmlDoc.XmlResolver = null;
        xmlDoc.Load(reader);
    }
    return xmlDoc;
}

当我尝试加载“阅读器”时,我收到以下错误:未找到预期的 DTD 标记。 有没有办法让解析器忽略 Doctype 元素?或者,我可以做一些更有效率的事情?

【问题讨论】:

    标签: rss dtd


    【解决方案1】:

    只要 DTD 没有定义您需要使用的任何 &amp;entities;(改用字符引用!),您就可以通过将 XmlResolver 设置为 null 来告诉 XmlTextReader 不要包含外部实体(包括 DTD) .

    (这应该是默认设置。大多数情况下,您不希望它开始下载 DTD,即使 DTD 仍然存在。在这种情况下,AOL 的行为特别糟糕不仅要删除 DTD,还要为某些 HTML 提供不正确的 301 响应,而不是适当的 404。)

    【讨论】:

      【解决方案2】:

      http://my.netscape.com/publish/formats/rss-0.91.dtd 会导致 301,而后者又会转到 http://netscape.aol.com/index.html

      即此 URL 中没有 DTD。

      【讨论】:

        猜你喜欢
        • 2018-07-30
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2018-01-31
        • 1970-01-01
        • 2021-02-28
        • 1970-01-01
        相关资源
        最近更新 更多