8

LINQ で XDocument を使用して、xml ドキュメントを編集 (挿入) および保存しています。

XDocument doc = XDocument.Load("c:\\sample.xml", LoadOptions.PreserveWhitespace);
doc.Save("c:\\sample.xml",SaveOptions.DisableFormatting)

doc.Save の前の sample.xml :

<ELEMENT ATTRIB1="attrib1"  ATTRIB2="attrib2" >
    value
</ELEMENT>

doc.Save 後の sample.xml

<ELEMENT ATTRIB1="attrib1" ATTRIB2="attrib2">
    value
</ELEMENT>

ご覧のとおり、元のドキュメントでは、ATTRIB1 の後に 2 つのスペースがあり、ATTRIB2 の後に 1 つのスペースがあります。しかし、doc.save を呼び出すと、これらのスペースは linq によって削除されました。

タグ内の空白を保持するにはどうすればよいですか?

4

2 に答える 2

15

私はそれを信じてLoadOptions.PreserveWhitespaceおりSaveOptions.DisableFormatting、インデントとテキストノードのコンテンツに関して空白を処理する方法についてのみ XDocument に指示します。それでも属性などを正規化します。

必要に応じて構成された XmlWriter を指定するオーバーロードを使用したい場合があります。既定の XmlTextWriter で動作する構成が見つからない場合は、いつでも独自の XmlWriter を作成できます。

于 2011-12-22T07:12:59.120 に答える
1

これらは「意味のない空白」であり、XMLの読み取り時に削除されます。save を呼び出すまでに、属性間の間隔に関する情報はありません。(厳密に言えば、XML では意味がないため、属性の順序さえわからない可能性があることに注意してください)。

XML 標準で直接サポートされていない方法で XML を読み書きしたい場合は、何らかのカスタム処理を提供する必要があります。要件によっては、カスタム XmlWriter で十分な場合があります (つまり、属性を 2 つの空白で均一に分離したい場合)、または元の XML からの情報を実際に保持する (それを処理する) 場合は、スタック全体 (リーダー/ライター/ノード) を自分で構築する必要があります。 XML ではなくテキストとして)。

于 2011-12-22T09:07:32.417 に答える