Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XDocument:如何设置输出格式,使我的值与元素标记位于单独的行上?_C#_Xml - Fatal编程技术网

C# XDocument:如何设置输出格式,使我的值与元素标记位于单独的行上?

C# XDocument:如何设置输出格式,使我的值与元素标记位于单独的行上?,c#,xml,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]]> </sendC

我正在读取一个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>
然后立即写下来,就像这样:

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>

0.05

不幸的是,我需要为一个程序生成输出xml,如果xml本身是完全有效的,那么这个程序可能无法正常工作,但它的格式不是它想要的。有没有简单的方法写出Xml,以便使用与元素标记分开的行上的值对其进行格式化?

您需要更改
加载选项以保留空白:

XDocument.Load(@"C:\MyCode\CONFIGURATION_1NS.xml", LoadOptions.PreserveWhitespace);
请参见演示-您可以看到结果与输入相同。为了保存,您应该能够直接使用
doc.Save(path)
,因为在写入时应该保留现有的空白

另外,您可以删除这一行,因为新的
XDocument
会立即被丢弃:

var xDoc = new XDocument();

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

XDocument.Load(@"C:\MyCode\CONFIGURATION_1NS.xml", LoadOptions.PreserveWhitespace);
请参见演示-您可以看到结果与输入相同。为了保存,您应该能够直接使用
doc.Save(path)
,因为在写入时应该保留现有的空白

另外,您可以删除这一行,因为新的
XDocument
会立即被丢弃:

var xDoc = new XDocument();

该程序(消费者)是否使用某种自定义解析器?大多数XML解析器(至少以我的经验)并不关心这些格式问题。。。他们可能正在使用某种定制解析器,但它的工作方式并不像人们希望的那样好。我们过去在使用xml文件时遇到过一些问题,这些xml文件的格式并不像预期的那样。我讨厌与那些认为XML应该定制的第三方打交道,不管他们如何理解或不理解标准XML。你有我的同情心:)关于我能想到的唯一一件事是手动调整你发送的XML,但这可能会a)变得单调乏味,b)有时会导致自己的问题。该程序(消费者)使用某种自定义解析器吗?大多数XML解析器(至少以我的经验)并不关心这些格式问题。。。他们可能正在使用某种定制解析器,但它的工作方式并不像人们希望的那样好。我们过去在使用xml文件时遇到过一些问题,这些xml文件的格式并不像预期的那样。我讨厌与那些认为XML应该定制的第三方打交道,不管他们如何理解或不理解标准XML。我很同情你:)关于我能想到的唯一一件事是手动调整你发送的XML,但这可能会a)变得单调乏味,b)有时会导致它自己的问题。