2016-07-01 8 views
0

私はその中で読んでいるxmlファイルを持っているが、このような形式は次のとおりです。XDocument:値を要素タグとは別の行に出力するように出力をフォーマットするにはどうすればよいですか?

XDocument xDoc = new XDocument(); 
xDoc = XDocument.Load(@"C:\MyCode\CONFIGURATION_1NS.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オブジェクトに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

は、ある種のカスタムパーサーを使用しているプログラム(消費者)です:?新しいXDocumentはすぐに捨てているようさておき、あなたは、この行を削除することができますよう

ほとんどのXMLパーサー(私の経験では少なくとも)は、こうした種類の書式設定の問題には関心がありません。 – Tim

+0

ティム、私が言うことができるのは、おそらく誰かが望むように動作しないカスタムパーサーを使用しているということだけです。私たちは過去に、このクライアントが期待どおりにフォーマットされていないXMLファイルを使用しているという問題を抱えていました。 – Imbajoe

+0

私はここに答えがあると思います:http://stackoverflow.com/questions/7485037/xdocument-text-node-new-line – Haytam

答えて

2

あなたは空白を保持するためにあなたのLoadOptionsを変更する必要があります。

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

は、デモ用のthis fiddleを参照してください - あなたは結果は入力と同じで見ることができます。保存するには、doc.Save(path)を直接使用することができます。既存の空白は書き込み時に保存する必要があります。

var xDoc = new XDocument(); 
関連する問題