XMLDocument.Save добавляет возвратные каретки в XML, когда элементы пусты

Я загружаю XML-документ, в котором есть теги, которые не имеют внутреннего текста.

Если я заполняю внутренний текст некоторыми данными, тогда он работает по мере необходимости (вы получаете открывающий тег, внутренний текст и закрывающий тег все в одной строке), как показано ниже...

<root>
  <element>value</element>
</root>

Проблема возникает с тегами без значений. Они ДОЛЖНЫ отображаться так же, как и выше, за исключением значения грубого, например следующего...

<root>
  <element></element>
</root>

Однако, когда внутренний текст имеет пустую строку, он добавляет возврат каретки и фид строки, который не является ожидаемым! Он выглядит следующим образом...

<root>
  <element>
  </element>
</root>

Это мой текущий код, который дает приведенные выше результаты...

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\test.xml");

//Save the xml and then cleanup
xmlDoc.Save(@"C:\test.xml");

Ответ 1

Это исправило это для меня...

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\test.xml");

//Save the xml and then cleanup
XmlWriterSettings settings = new XmlWriterSettings { Indent = true };
XmlWriter writer = XmlWriter.Create(@"C:\test.xml", settings);
xmlDoc.Save(writer);

Ответ 2

Вы управляете этим через XMLWriter в Свойстве настроек.

Просмотрите этот пример вместе со следующими ссылками. http://msdn.microsoft.com/en-us/library/ms162618.aspx

ссылка, http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.aspx http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx

Ответ 3

Возможно, слишком поздно, но я упомянул решение, данное Арво Боуэном. Решение Arvo находится в С#, я написал то же самое в PowerShell Syntax

# $dest_file is the path to the destination file
$xml_dest = [XML] (Get-Content $dest_file)

#
#   Operations done on $xml_dest
#

$settings = new-object System.Xml.XmlWriterSettings
$settings.CloseOutput = $true
$settings.Indent = $true
$writer = [System.Xml.XmlWriter]::Create($dest_file, $settings)

$xml_dest.Save($writer)
$writer.Close()

Он решил две мои проблемы: