XmlDocumentからXML宣言付きの整形済みXMLをstringで取得する

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
dotnet-icon

今回は、XmlDocumentからXML宣言(<?xml ~ ?>)付き、かつインデント入りで整形されたXML形式の文字列を取り出す方法を考えてみます。

C#でXMLドキュメントを扱うときはXmlDocumentクラスを使います。また作成したXMLを文字列として取得したい場合は、下記のようにOuterXmlプロパティなどを用いれば取得できます。

でも、このOuterXmlで取得できる文字列はXML宣言や改行、インデントなどが含まれていません。つまり、人間が見たり、XML文書としての体裁が必要なサービスに送信したりするには非常に不便なのです。

このため、XMLファイルに保存したような文字列を取得したい場合は、工夫しなければなりません。
まず、Save()メソッドで整形済み文字列としてファイルに保存できます。のSave()メソッドはファイル名だけでなく、Streamもパラメータとして受け取ることができるので、ここにStringWriterを渡せば文字列に変換できます。

ただし、StringWriterはなぜかUTF-16しか扱えないので、XmlDocumentをUTF-8で作ってもShift-JISで作っても強制的にXML宣言がUTF-16になってしまいます
これを他のエンコードに変えたい場合は、専用のStringWriterを作る必要があります。下記のようにStringWriterを継承して、Encodingプロパティをオーバーライドしてしましょう。

あとはこれを使って、Saveしてあげましょう。最後にこれをいちいち書くのも面倒なので拡張メソッドとして定義しておきます(拡張メソッドはC# 3.0以降のみ使えます)。

こうしておけばdocのメソッドとして呼び出せてべんりです。

That’s it!

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク