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;
}

「reader」をロードしようとすると、次のエラーが表示されます: Expected DTD markup was not found . パーサーに Doctype 要素を無視させる方法はありますか? それとも、もっと効率的なことができますか?

4

2 に答える 2

3

DTD で使用する必要があるものが定義されていない限り&entities;(代わりに文字参照を使用してください)、XmlResolverを null に設定することにより、XmlTextReader に外部エンティティ (DTD を含む) を含めないように指示できます。

(実際にはこれがデフォルトであったはずです。ほとんどの場合、XML 文書を読んでいるときに、DTD がまだ存在していても、DTD をダウンロードすることを望まないでしょう。この場合、AOL は、 DTD を削除しますが、適切な 404 ではなく、一部の HTML に対して誤った 301 応答を提供します。)

于 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 に答える