Когда я создаю XML с нуля XmlDocument
, в OuterXml
свойстве уже есть все с красивым отступом с переносами строк. Однако, если я вызываю LoadXml
какой-то очень «сжатый» XML (без разрывов строк или отступов), то вывод OuterXml
остается таким. Так ...
Каков самый простой способ получить улучшенный вывод XML из экземпляра XmlDocument
?
c#
.net
xmldocument
outerxml
Нил С. Обремски
источник
источник
settings.Encoding = Encoding.UTF8;
MemoryStream
+StreamWriter
с указанной кодировкой вместоStringBuilder
, и получения текста с помощьюenc.GetString(memstream.GetBuffer(), 0, (int)memstream.Length);
. Однако конечный результат по-прежнему никак не отформатирован. Может быть, я начинаю с прочитанного документа, в котором уже есть форматирование? Я просто хочу, чтобы мои новые узлы тоже были отформатированы."\r\n"
ToEnvironment.Newline
.doc.PreserveWhitespace
не должно быть установлено значение true. В противном случае это не удастся, если он уже содержит частичный отступ.Как адаптировано из блога Эрики Эрли , это должно сработать:
источник
using
оператора автоматически закрывает писатель приDispose()
вызове.Или даже проще, если у вас есть доступ к Linq
источник
<?xml ...?>
и<!DOCTYPE ...>
из XML. Подходит для фрагмента, но нежелательно для полного документа.Более короткая версия метода расширения
источник
Если указанный выше метод Beautify вызывается для объекта,
XmlDocument
который уже содержитXmlProcessingInstruction
дочерний узел, возникает следующее исключение:Это моя модифицированная версия оригинальной, чтобы избавиться от исключения:
Теперь это работает для меня, возможно, вам нужно будет сканировать все дочерние узлы для
XmlProcessingInstruction
узла, а не только первый?Обновление апрель 2015 г .:
Поскольку у меня был другой случай, когда кодировка была неправильной, я искал, как применить UTF-8 без спецификации. Я нашел это сообщение в блоге и создал на его основе функцию:
источник
Encoding = Encoding.UTF8
иOmitXmlDeclaration = true
источник
источник
Простой способ - использовать:
Как и этот пример кода, этот код я использовал для создания древовидной структуры с помощью XMLWriter:
Таким образом вы можете добавлять табуляцию или разрывы строк обычным способом, то есть \ t или \ n
источник
При реализации размещенных здесь предложений у меня возникли проблемы с кодировкой текста. Кажется, что кодировка
XmlWriterSettings
игнорируется и всегда переопределяется кодировкой потока. При использованииStringBuilder
это всегда внутренняя кодировка текста C #, а именно UTF-16.Итак, вот версия, которая поддерживает и другие кодировки.
ВАЖНОЕ ПРИМЕЧАНИЕ. Форматирование полностью игнорируется, если свойство вашего
XMLDocument
объектаpreserveWhitespace
включено при загрузке документа. Это поставило меня в тупик на некоторое время, поэтому не включайте это.Мой последний код:
Это сохранит отформатированный xml на диск с заданной кодировкой текста.
источник
Если у вас есть строка XML, а не готовый к использованию документ, вы можете сделать это следующим образом:
источник
Более упрощенный подход, основанный на принятом ответе:
Установка новой строки не требуется. Символы отступа также имеют два пробела по умолчанию, поэтому я предпочел не устанавливать его.
источник