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,以便将值格式化在与元素标记分开的行上?

XDocument:我如何格式化我的输出,使我的值与元素标记在单独的行上

您需要更改您的LoadOptions以保留空白:

XDocument.Load(@"C:'MyCode'CONFIGURATION_1NS.xml", LoadOptions.PreserveWhitespace);

查看此演示—您可以看到结果与输入相同。为了节省,您应该能够直接使用doc.Save(path),因为在写时应该保留现有的空白。

作为题外话,您可以删除这一行,因为新的XDocument将立即被丢弃:

var xDoc = new XDocument();