1

XMLReader と XMLWriter を使用して XML を読み書きするプログラムがあります。

 XmlWriter writer =
 XmlWriter.Create(fullpath, settings);

 //content...

 writer.Flush();

 writer.Close();

そして私のリーダーコード

XmlReader reader = XmlReader.Create(fullpath);

while (reader.Read())
        {
            switch(reader.NodeType)
            {
                case XmlNodeType.Element:
                    Console.WriteLine("Element: " + reader.Name);

                    while(reader.MoveToNextAttribute())
                    {

                        Console.WriteLine("\tAttribute: [" + reader.Name + "] = '" + 
                        reader.Value + "'");
                    }
                    break;

                case XmlNodeType.DocumentType: 
                    Console.WriteLine("Document: " + reader.Value); 
                    break;

                case XmlNodeType.Comment:
                    Console.WriteLine("comment: " + reader.Value);
                    break;

                default: 
                    Console.WriteLine("unknown type, error!");
                    break;
            }
        }

        reader.Close()

ライターは正常に動作しますが、XmlReader に到達すると、 reader = XmlReader.Create(fullpath); になります。

不明なタイプのエラー メッセージを 2 回出力し、エラーでクラッシュします

未処理の例外: System.Xml.XmlException: セキュリティ上の理由から、この XML ドキュメントでは DTD は禁止されています。DTD 処理を有効にするには、XmlReaderSettings の ProhibitDtd プロパティを false に設定し、その設定を XmlReader.Create メソッドに渡します。System.Xml.XmlTextReaderImpl.Throw(Exception e) で System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res, String arg) で System.Xml.XmlTextReaderImpl.ParseDoctypeDecl() で System.Xml.XmlTextReaderImpl.ParseDocumentContent() で System. C:\Main\C#June\CH9\CodeFile1.cs:line の writefile.Main() での Xml.XmlTextReaderImpl.Read()

XmlReader.Create(fullpath) の前にこれを追加してみました

XmlReaderSettings settingsread = new XmlReaderSettings();
settingsread.ProhibitDtd = false;

それでも同じエラーが発生します。このプログラムの本当の問題は何ですか?

4

1 に答える 1

4

設定を参照するようにリーダーの作成を変更する必要があると思います

XmlReader reader = XmlReader.Create(fullpath);

なるべき

XmlReader reader = XmlReader.Create(fullpath, settingsread);
于 2010-06-28T17:06:07.600 に答える