での Xmlファイルの作成はEncodingの指定をせずに保存しました。
今回はEncodingを指定して、保存する方法を紹介します。
まずは保存先ファイル名とEncodingを変数に代入します。
PS C:\Work> $SaveFile = "C:\Work\UTF8.xml"
PS C:\Work> $Encoding = [System.Text.Encoding]::UTF8
次に、前回同様ヒア文字列を使用してXML文字列を作成
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>
>> "@
>>
で、これをXmlDocument型にキャストしておきます。
PS C:\Work> $xmlDoc = [xml]$strXml
で、前回はここで$XmlDoc.Save()メソッドを実行したのですが、ここでXmlTextWriterを作成します。
こうすることでEncodingを指定できます。
PS C:\Work> $XmlWriter = New-Object System.Xml.XmlTextWriter($SaveFile, $Encoding)
で、保存して、XmlTextWriterを閉じます。
PS C:\Work> $xmlDoc.Save($xmlWriter)
PS C:\Work> $xmlWriter.Close()
実際にファイルを開いてみると、utf-8で有ることが確認できます。(下図はサクラエディタで開いたものです)
最後に、上記を応用して、Shift_Jisで保存してみたいと思います。
PS C:\Work> $SaveFile = " ps c:\Work\Shift_Jis.xml? c:\Work>$encoding = [System.Text.Encoding]::GetEncoding("Shift_Jis")
PS C:\Work> $xmlDoc = [xml]$strXml
PS C:\Work> $XmlWriter = New-Object System.Xml.XmlTextWriter($SaveFile, $Encoding)
PS C:\Work> $xmlDoc.Save($xmlWriter)
PS C:\Work> $xmlWriter.Close()
作成したXmlファイルはShift_Jisであることが確認できます。
注意事項が2点あります。
1つ目はEncodingです。
UTF8のときと違って、Shift_Jistは
$encoding = [System.Text.Encoding]::Shift_Jis
とすることができません。
GetEncodingメソッドを使用して
[System.Text.Encoding]::GetEncoding("Shift_Jis")
とする必要があります。
2つ目は、Xmlファイルが改行されずに1行になってしまっていることです。
(前回の方法で保存したものは改行および自動インデントがされました)
これについては、次回以降で説明したいと思います。