2017年1月28日

【PowerShell】Shift-JisのXMLファイルのデータを書き換える


Shift-JisのXMLファイルのデータを書き換える方法です。

例えば次のようなXMLファイルがあったとします。
ファイル名は、users.xmlで、文字コードはShift-Jisで保存されています。
<User>
    <Person>
        <Name>佐藤</Name>
        <Phone>111-222-333</Phone>
        <Email>sato@nantoka.com</Email>
    </Person>
    <Person>
        <Name>鈴木</Name>
        <Phone>444-555-6666</Phone>
        <Email>suzuki@nantoka.com</Email>
    </Person>
</User>


このXMLファイルのデータを書き換えるには次のようにします。
PS C:\work> $person = $x.User.Person[0]
PS C:\work> $person.Phone = "888-888-8888"
PS C:\work> $Encoding = [System.Text.Encoding]::GetEncoding("Shift_Jis")
PS C:\work> $xmlWriter = New-Object System.Xml.XmlTextWriter("C:\work\users.xml", $Encoding)
PS C:\work> $xmlWriter.Formatting = "Indented"
PS C:\work> $xmlWriter.Indentation = "4"
PS C:\work> $x.Save($xmlWriter)
PS C:\work> $xmlWriter.Close()
PowerShellでは扱う文字コードがデフォルトでUTF-8になっていますので、XmlTextWriterのエンコーディングでShift-Jisを指定して読み込む必要があります。
そして、Formatting で「Indented」を指定してあげることにより改行が行われ見やすくなります。6行目の「Indentation」は改行幅です。あとは、Saveで保存して、最後に Close()メソッドでXmlTextWriterをクローズしています。


Get-Contentで確認すると、確かに書き換えられてることが確認できます。
PS C:\work> Get-Content .\users.xml
<?xml version="1.0" encoding="shift_jis"?>
<User>
    <Person>
        <Name>佐藤</Name>
        <Phone>888-888-8888</Phone>
        <Email>sato@nantoka.com</Email>
    </Person>
    <Person>
        <Name>鈴木</Name>
        <Phone>444-555-6666</Phone>
        <Email>suzuki@nantoka.com</Email>
    </Person>
</User>




スポンサーリンク