У меня есть 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 (очень очень ручной процесс).
В конце этого я предпочел бы простое решение, чем то, которое следует моим предпочтениям. (Естественно, лучшее решение было бы простым и соответствовало бы моим предпочтениям.)