Encodingを指定してXMLファイルを作成する(PowerShell Tips) で紹介した方法で、文字列からXMLファイルを作成すると、インデントと改行がされないことをお伝えしました。
ということで、今回は前回の手順に+αすることで、改行とインデントがされるようにしてみたいと思います。
まずは前回の手順どおりにXmlTextWriterまで作成します。
PS C:\Work> $SaveFile = "C:\Work\UTF8.xml"
PS C:\Work> $Encoding = [System.Text.Encoding]::UTF8
PS C:\Work> $strXml = @"
>> <?xml version='1.0' encoding='utf-8' ?>
>> <personal_data>
>> <zip_code>012-3456</zip_code>
>> <address>1-1,Tokyo,Japan</address>
>> <name>HIRO</name>
>> </personal_data>
>> "@
>>
PS C:\Work> $xmlDoc = [xml]$strXml
PS C:\Work> $XmlWriter = New-Object System.Xml.XmlTextWriter($SaveFile, $Encoding)
で、今回のポイントはここからです
PS C:\Work> $XmlWriter.Formatting = [System.Xml.Formatting]::Indented
PS C:\Work> $XmlWriter.Indentation = 4
XmlTextWriter のFormattingプロパティに Indentedを指定することで、作成するXmlドキュメントでインデントがされるようになります。
また、XmlTextWriter の Indentation プロパティを使用することでインデント幅を指定することができます。
上記の場合はインデント幅は空白4つ分です。
あとは、ドキュメントを保存して、XmlTextWriterを閉じておしまいです。
PS C:\Work> $xmlDoc.Save($xmlWriter)
PS C:\Work> $XmlWriter.Close()
作成されたドキュメントは下記のように改行とインデントがされています。
<xml version='1.0' encoding='utf-8'?>
<personal_data>
<zip_code>012-3456</zip_code>
<address>1-1,Tokyo,Japan</address>
<name>HIRO</name>
</personal_data>