阅读RSS问题 - 未找到预期的DTD标记

时间:2009-09-30 13:19:36

标签: rss dtd

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

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

2 个答案:

答案 0 :(得分:3)

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

(这应该是默认的。大多数时候你正在阅读XML文档,你不希望它下载DTD,即使DTD仍然存在。在这种情况下,AOL表现得特别糟糕通过不仅删除DTD,而是对某些HTML而不是相应的404提供错误的301响应。)

答案 1 :(得分:0)

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

即。此网址没有DTD。