我正在阅读的xml文件格式如下:
<?xml version="1.0" encoding="utf-8"?>
<Screen_Monitoring>
<Interval>
0.05
</Interval>
<sendCommand>
<![CDATA[01 30 41 30 41 30 36 02 30 31 44 36 03]]>
</sendCommand>
</Screen_Monitoring>
我将xml文件读入XDocument对象,如下所示:
XDocument xDoc = new XDocument();
xDoc = XDocument.Load(@"C:\MyCode\CONFIGURATION_1NS.xml");
并立即将其写回:
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true,
IndentChars = " ",
NewLineChars = "\r\n",
NewLineHandling = NewLineHandling.Replace
};
using (XmlWriter writer = XmlWriter.Create(@"C:\MyCode\Config_saved.xml", settings))
{
xDoc.WriteTo(writer);
}
输出与输入文件的内容不匹配,因为sendCommand元素在与标记位于同一行的sendCommand标记之间具有值,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Screen_Monitoring>
<Interval>
0.05
</Interval>
<sendCommand><![CDATA[01 30 41 30 41 30 36 02 30 31 44 36 03]]></sendCommand>
</Screen_Monitoring>
不幸的是,我需要为一个程序生成输出xml,如果xml本身完全有效,它可能无法正常工作,但它没有按照它想要的格式化。是否有任何简单的方法来写出Xml,以便在与元素标签分开的行上使用值进行格式化?
答案 0 :(得分:2)
您需要更改LoadOptions
以保留空白:
XDocument.Load(@"C:\MyCode\CONFIGURATION_1NS.xml", LoadOptions.PreserveWhitespace);
有关演示的信息,请参阅this fiddle - 您可以看到结果与输入相同。对于保存,您应该只能直接使用doc.Save(path)
,因为现有的空格应该在写入时保留。
顺便说一句,您可以删除此行,因为新XDocument
会立即被丢弃:
var xDoc = new XDocument();