XMLの属性値の改行・・・

dom4jを使って、XMLを操作していたのですが、
改行でえらいハマってしまいました。

属性値に改行を含む場合、DOMを更新、UTF-8でファイル保存すると
改行が、LFで作成されます。(エディタで確認)
これは、おそらく
http://www.atmarkit.co.jp/fxml/rensai/xmlwomanabou10/learning-xml10.html
ここに書いてあるように
「内部処理のためにはLFのみに統一する(正規化という)ことがXML 1.0勧告に記述されている」
ことから、LFで作成されるのだと思います。
で、このファイルをdom4jで再度、読み込んだ場合、
http://www015.upp.so-net.ne.jp/StudyingXML/xml/xml_2/normalization.html
ここに書いてある通り、
「属性値に含まれるCR(復帰), LF(改行), TAB(タブ)は、 半角スペースに置き換えられます。」
となっていて、せっかく改行した属性値が、半角スペースに置換されて読み込まれてしまします。
これはイタイ。

本来なら、改行が含まれるデータの場合、
CDATAセクションを使うべきなのでしょう。
ただ、既存のデータがあったり、
全ての属性値をCDATAに対応するのは、難しいです。
XMLの容量増えるし。

で、どうしようかと。
やってみたのは、XMLファイルの属性値の改行を

(&を全角で書いてます)
で置き換えたところ、
・読み込みでは、改行で認識。(Javaでは、\n)
・書き込みすると、改行で更新。(当然、
で更新されない)
・再度、読み込み、半角スペースで置換される。当然・・・。

属性値に改行を使う場合は、CDATAしか無いのかーと思いましたが、
書き込む時に、「\n」を「
」に置換すればいいのではと。
幸い、改行される可能性がある属性値が限定されているので、
その属性を全操作して、更新前に、「\n」を「
」に置換しました。
が!
置換すると、dom内で、ご丁寧に&(アンパサンド)がエスケープされます。
name="あああ
いいい"
だもんで、さらに
str = str.replaceAll("&", "&");

うーん。動くは動くけど、仕組みとしてどうなのか・・・。
macの場合、まだ考慮必要そうだし。一応、\nも\rも置換はしてるけど。
なんか、WinとMacとか考慮するぐらいなら、オリジナル改行コードを定義して、
それ参照で、表示時改行させるほうが、分かりやすい気がします。
改行の全操作の置換のコストもかかるしなぁ・・・。

ちなみに、Flex(AIR)でXML作成すると、
属性値の改行は、何もしなくても


が付きます。ありがたいっちゃーありがたいけどなぁ。

やっぱJSONか・・・。