Избегайте XmlDocument, проверяющего пространства имен в C#

Я пытаюсь найти способ отступа в файле HTML, я использую XMLDocument и просто использую XmlTextWriter.

Однако я не могу правильно отформатировать его для документов HTML, потому что он проверяет тип документа и пытается его загрузить.

Существует ли «тупой» механизм отступов, который не проверяет и не проверяет документ, а отступ делает все возможное? Файлы имеют размер 4-10 МБ, и они генерируются автоматически, мы должны обрабатывать их внутри - это нормально, пользователь может подождать, я просто хочу избежать разветвления на новый процесс и т. д.

Вот мой код для справки

        using (MemoryStream ms = new MemoryStream())
        using (XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.Unicode))
        {
            XmlDocument doc = new XmlDocument();
            // LoadSettings the unformatted XML text string into an instance
            // of the XML Document Object Model (DOM)
            doc.LoadXml(content);

            // Set the formatting property of the XML Text Writer to indented
            // the text writer is where the indenting will be performed
            xtw.Formatting = Formatting.Indented;

            // write dom xml to the xmltextwriter
            doc.WriteContentTo(xtw);

            // Flush the contents of the text writer
            // to the memory stream, which is simply a memory file
            xtw.Flush();

            // set to start of the memory stream (file)
            ms.Seek(0, SeekOrigin.Begin);

            // create a reader to read the contents of
            // the memory stream (file)
            using (StreamReader sr = new StreamReader(ms))
                return sr.ReadToEnd();
        }

По сути, прямо сейчас я использую MemoryStream, XmlTextWriter и XmlDocument, после отступа я читаю его обратно из MemoryStream и возвращаю в виде строки. Сбои случаются с документами XHTML и некоторыми документами HTML 4, потому что они пытаются захватить dtds. Я попытался установить XmlResolver как null, но безрезультатно :(


person Abbey Kingston    schedule 29.04.2010    source источник
comment
Я думаю, что HTML не является допустимым XML, поэтому вы не можете использовать на нем XmlDocument, XHTML...   -  person munissor    schedule 29.04.2010
comment
вау, ребята, вы быстрые! Даже для XHTML загружаются DTD :(   -  person Abbey Kingston    schedule 29.04.2010


Ответы (1)


Без доступа к конкретному X[H]TML, вызывающему проблемы, трудно понять, будет ли это работать, но пробовали ли вы вместо этого использовать XDocument?

XDocument xdoc = XDocument.Parse(xml);
string formatted = xdoc.ToString();
person Aaronaught    schedule 30.04.2010