XDocument:我如何格式化我的输出,使我的值与元素标记在单独的行上
本文关键字:我的 元素 单独 格式化 XDocument 输出 | 更新日期: 2023-09-27 17:54:25
我有一个我正在阅读的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,以便将值格式化在与元素标记分开的行上?
您需要更改您的LoadOptions
以保留空白:
XDocument.Load(@"C:'MyCode'CONFIGURATION_1NS.xml", LoadOptions.PreserveWhitespace);
查看此演示—您可以看到结果与输入相同。为了节省,您应该能够直接使用doc.Save(path)
,因为在写时应该保留现有的空白。
作为题外话,您可以删除这一行,因为新的XDocument
将立即被丢弃:
var xDoc = new XDocument();