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()
Он решил две мои проблемы: