2011年9月6日火曜日

XMLドキュメントでは改行は¥nで、¥r¥nではない


C#(.NET Framework)でXMLドキュメントを保存すると、要素 (element) の内容に改行が存在していても、改行は\r\nではなく、\nになる。
XMLドキュメントの読み込み時などに\nから\r\nに変換しないと、TextBox上で改行表示されないなど、Windowsでは改行として扱われない。

これはXMLドキュメントの仕様を定めているW3Cが、改行コードは\n(LF)としているため、Windowsでの改行コード、\r\n(CR+LF)と異なる。改行コードを\nとしているのは、すでにMacやLinuxなどのUNIX系では\nであり、OSによる改行コードの違いの混乱を避けるためだ。.NET FrameworkでXMLドキュメントを保存する場合でも、これに従い\rを削除し\nのみを保存する。

保存時に、改行が\nで保存されるのは、W3Cの仕様に従ったものだから問題ないとしても(XMLドキュメントもテキストファイルであると考えた場合、Windows上で改行コードの異なるテキストファイルが存在するという問題は無視して)、読み込み時に.NET Frameworkが改行コードをどのように扱うかが問題となってくる。

実際に、XDocument.Loadメソッドで読み込むと、改行は\nのままで読み込まれる。XDocument.LoadメソッドにはLoadOptionsを指定できるが、改行コードを\nから\r\nに変換してくれるようなオプションは見当たらない。

String.Replace("\n", "\r\n")とするなどして、改行コードを変換するしか方法はなさそうだ。

0 件のコメント:

コメントを投稿