1

我正在打开引用 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;
}

当我尝试加载“阅读器”时,出现以下错误:Expected DTD markup was not found。有没有办法让解析器忽略 Doctype 元素?或者,也许,我可以做一些更有效的事情?

4

2 回答 2

3

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

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

于 2009-09-30T13:48:57.150 回答
0

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

即这个URL 没有DTD。

于 2009-09-30T13:36:16.053 回答