Чтение и запись в XML - ошибка DTD - PullRequest
1 голос
/ 28 июня 2010

У меня есть программа, в которой он читает и пишет XML с использованием XMLReader и XMLWriter

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

дважды печатает сообщение об ошибке неизвестного типа и выдает ошибку

Необработанное исключение: System.Xml.XmlException: для безопасности причины DTD запрещают в этом документе XML. Чтобы включить обработку DTD, установите ProhibitDtd недвижимость на XmlReaderSettings в false и передать настройки в XmlReader.Create meta д. в System.Xml.XmlTextReaderImpl.Throw (Исключение е) в System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo (String Res, String Arg) в System.Xml.XmlTextReaderImpl.ParseDoctypeDecl () в System.Xml.XmlTextReaderImpl.ParseDocumentContent () в System.Xml.XmlTextReaderImpl.Read () в writefile.Main () в C: \ Main \ C # June \ CH9 \ CodeFile1.cs: строка

Я пытался добавить это до XmlReader.Create (fullpath)

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

Я все еще получаю ту же ошибку, в чем реальная проблема в этой программе?

1 Ответ

4 голосов
/ 28 июня 2010

Полагаю, вам нужно изменить созданный вами ридер, чтобы он ссылался на настройки

XmlReader reader = XmlReader.Create(fullpath);

должно стать

XmlReader reader = XmlReader.Create(fullpath, settingsread);
...