XDocument:如何格式化输出,使我的值与元素标签分开?

时间:2016-07-01 17:00:18

标签: c# xml

我正在阅读的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,以便在与元素标签分开的行上使用值进行格式化?

1 个答案:

答案 0 :(得分:2)

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

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

有关演示的信息,请参阅this fiddle - 您可以看到结果与输入相同。对于保存,您应该只能直接使用doc.Save(path),因为现有的空格应该在写入时保留。

顺便说一句,您可以删除此行,因为新XDocument会立即被丢弃:

var xDoc = new XDocument();