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>
スポンサーリンク