2016-09-29 13 views
1

を生成するときに、私は(\ nは)改行を含む、私は前にAPIへの投稿にXMLを生成したい場合がありますキャリッジリターンを追加しますが、ない(ノー\ rを )。 C#のXDocumentは、キャリッジリターンを、最終的なXML文字列

は、しかし、XDocumentが自動的にまで弦方法キャリッジリターンを追加しているようです。)doc.Root.ToStringで

var inputXmlString = "<root>Some text without carriage return\nthis is the new line</root>"; 

// inputXmlString: <root>Some text without carriage return\nthis is the new line</root> 

var doc = XDocument.Parse(inputXmlString); 

var xmlString = doc.Root.ToString(); 

// xmlString: <root>Some text without carriage return\n\rthis is the new line</root> 

を(\ n個の\ rのセットはするための要素との間に追加されます受信者がxmlメッセージ全体を解釈するのに重要でないインデント。しかし、ToString()メソッドは、スタンドアロンの改行を保持する必要がある実際のテキストフィールドの内側に\ rを追加します。

最終的な文字列置換を行うことができます。実際のHTTP投稿が実行される前にすべてのキャリッジリターンを最終文字列から削除しますが、これは間違っているようです。

のXElementオブジェクトの代わりに、Document.Parseを使用してXMLドキュメントを構築する際の問題は同じです。この問題は、たとえCData要素を使ってテキストをラップしても存続します。

私は何か間違っている場合、または私がしようとすることを達成するためのいくつかのきれいな方法がある場合、誰にでも私に説明することはできますか?

答えて

3

XNode.ToStringをカバーの下にXmlWriterを使用して便利です - あなたはreference sourceでコードを見ることができます。 XmlWriterSettings.NewLineHandlingためthe documentationパー

設定を置き換えは、Microsoft Windowsオペレーティングシステムで使用される新しいライン形式での\ r \ n、新しい行の文字を置き換えるためのXmlWriterに指示します。これにより、メモ帳やMicrosoft Wordアプリケーションでファイルを正しく表示できるようになります。この設定では、属性の新しい行を文字エンティティに置き換えて文字を保持します。 これがデフォルト値です。

これは、要素を文字列に戻すときに表示される理由です。あなたはこの動作を変更したい場合は、独自のXmlWriterSettingsを使用して独自のXmlWriterを作成する必要があります:

var settings = new XmlWriterSettings 
{ 
    OmitXmlDeclaration = true,   
    NewLineHandling = NewLineHandling.None 
}; 

string xmlString; 

using (var sw = new StringWriter()) 
{ 
    using (var xw = XmlWriter.Create(sw, settings)) 
    { 
     doc.Root.WriteTo(xw);      
    } 
    xmlString = sw.ToString(); 
} 
+0

ありがとう!それがトリックでした。 –

1

あなたが試してみました:

how to remove carriage returns, newlines, spaces from a string

string result = XElement.Parse(input).ToString(SaveOptions.DisableFormatting); 
Console.WriteLine(result); 
+0

xdoc.Root.Valueをやって、私の問題を修正違い –

+0

は、すべての書式を保持させませんxdoc.Root?.ToString()を実行するとキャリッジリターンが削除されました。 ありがとう! – Frederic

関連する問題