ファイルに保存する
ここではxmlDocumnetオブジェクトをXMLファイルとして保存する方法について説明します。
ここまでに作成したxmlDocumentオブジェクトをXMLとしてファイルに保存するにはSaveメソッドを使用します。Saveメソッドの引数には保存先となるパスを指定し、下記のように記述します。
PS> $xmlDoc.Save("C:\Work\Sample.xml")

これでXMLファイルとして保存することができました。
作成されたファイルをテキストエディタで開いてみると
<root ID="123"> <child1>5</child1> <child2>2</child2> <child3>3</child3> </root>
となっており、先頭にXML宣言がないことが分かります。またエンコーディングはShift-Jisで保存されています。
これをエンコーディングがUTF-8のXML宣言を付加した形で保存するにはXmlTextWriterクラスを使用します。XmlTextWriterクラスは引数にファイルのパスとエンコーディングを指定します。
最初にUTF-8のエンコーディングを下記のようにして準備します。
PS> $Encoding = [System.Text.Encoding]::UTF8
次にXmlTextWriterを作成します。ここで引数に保存するファイルのパスとエンコーディングを指定しています。
PS> $XmlWriter = New-Object System.Xml.XmlTextWriter("C:\Work\Sample.xml",$Encoding)

さらに、下記のようにしてXMLファイルを作成するときにインデントされるように指定します。この指定がない場合には、インデントをせずに1行のXMLデータファイルが作成されてしまいます。
PS> $xmlWriter.Formatting = [System.Xml.Formatting]::Indented

次にSaveメソッドでファイルに保存します。ここでSaveメソッドの引数に作成したXmlTextWriterを指定します。これでXML宣言が付加され、UTF-8で保存されます。
PS> $xmlDoc.Save($XmlWriter)

最後に保存が完了したら、XmlTextWriterをClose()メソッドで終了します。
PS> $xmlWriter.Close()

このようにして作成されたファイルを開くと、下記のようにXML宣言がつき、インデントがされ、UTF-8で保存されたXMLが確認できます。

まとめ
今回は、PowerShellでのXMLデータ作成を中心に説明しました。PowerShellからXMLファイルを作成することは難しくないことをご理解いただけたかと思います。次回は、既存のXMLファイルから読み込んだデータを操作する方法について説明します。どうぞお楽しみに。
参考文献
- HIRO's.NET
- PowerShell from Japan!!
- 『Windows PowerShell ポケットリファレンス』 牟田口大介 著、技術評論社、2008年4月
- 『Windows PowerShell クックブック』 Lee Holmes 著、マイクロソフト株式会社ITプロ エバンジェリストチーム 監訳/監修、菅野良二 訳、オライリージャパン、2008年10月
