XmlWriter.WriteRaw отступ

У меня есть аналогичный вопрос, например, Отступы XML при внедрении XML строку в XmlWriter.

Я также использую XmlWriter.WriteRaw для вывода фрагмента XML в узел xml. Этот фрагмент документа не соответствует идентификатору, что было бы неплохо. Ответ, указанный в сообщении выше, не работает для фрагментов XML. Я могу прочитать фрагмент с XmlReader, но WriteNode не работает с фрагментами документа (см. http://msdn.microsoft.com/en-us/library/1wd6aw1b.aspx).

Есть какие-нибудь намеки на то, как обмануть, чтобы получить правильный отступ?

Спасибо за любые подсказки


person Scoregraphic    schedule 24.11.2009    source источник


Ответы (2)


Вы можете создать действительный XML-документ в памяти, содержащий ваш XML-фрагмент. Затем прочтите этот документ с XmlReader (например, используя MemoryStream) и позвольте XmlWriter записать xml с отступом.

Более быстрый подход состоит в том, чтобы самостоятельно создать отступ в XML, манипулируя строкой. Найдите <, увеличьте уровень вложенности и добавьте отступы. Если вы обнаружите </ или самозакрывающийся тег, уменьшите уровень вложенности и добавьте \n

Я не думаю, что есть быстрое и хорошее решение вашей проблемы, но могу ошибаться ...

person Simon Ottenhaus    schedule 14.12.2009
comment
Я не думаю, что есть хорошее решение. Если бы он был там, кто-то уже нашел бы его. Но я принимаю ваш ответ, поскольку вы предоставляете возможности. Отступы вообще не работают, так что это просто для удобства чтения. Я подумал об использовании преобразования xsl после написания документа. См. social.msdn.microsoft.com / Forums / en / msxml / thread /, чтобы узнать о возможных преобразованиях. - person Scoregraphic; 15.12.2009

Это старый вопрос, но сегодня у меня та же проблема. Мое решение - использовать метод XmlDocument.WriteContentTo:

var innerXmlDoc = new XmlDocument();
innerXmlDoc.LoadXml("<params><param id=\"param1\" value=\"value1\"/></params>");
innerXmlDoc.WriteContentTo(xmlWriter);

https://dotnetfiddle.net/a2928r

person Alexander Vologin    schedule 13.02.2020