У меня есть запись XmlTextWriter в файл и XmlWriter с использованием этого текстового редактора. Этот текстовый редактор настроен на вывод XML с записями с табуляцией:
XmlTextWriter xtw = new XmlTextWriter("foo.xml", Encoding.UTF8);
xtw.Formatting = Formatting.Indented;
xtw.IndentChar = '\t';
xtw.Indentation = 1;
XmlWriter xw = XmlWriter.Create(xtw);
Изменена ссылка для MSDN Джеффа:
XmlWriterSettings set = new XmlWriterSettings();
set.Indent = true;
set.IndentChars = "\t";
set.Encoding = Encoding.UTF8;
xw = XmlWriter.Create(f, set);
Это не изменяет конечный результат.
Теперь я произвольная глубина в своем XmlWriter, и я получаю строку XML из другого места (которую я не могу контролировать), который представляет собой однострочный, без отступа XML. Если я вызову xw.WriteRaw(), тогда эта строка будет введена дословно и не будет следовать моему отступу, который я хочу.
...
string xml = ExternalMethod();
xw.WriteRaw(xml);
...
По сути, мне нужен WriteRaw, который будет анализировать XML-строку и проходить через все WriteStartElement и т.д., чтобы она переформатировалась в соответствии с настройками XmlTextWriter.
Мое предпочтение - это способ сделать это с установкой, которую у меня уже есть, и сделать это, не перезагружая окончательный XML, чтобы переформатировать его. Я также предпочел бы не разбирать XML-строку с подобными XmlReader, а затем имитировать то, что она находит в моем XmlWriter (очень ручной процесс).
В конце этого я предпочел бы простое решение, чем тот, который следует моим предпочтениям. (Лучшее решение, естественно, было бы простым и следовать моим предпочтениям.)