PowerShell XMLファイルにアクセスしろ!
スクリプトを作っていると、入力用データをどうしても外部ファイルから読み込まねばならぬシーンがある。
また、それとは別に、外部ファイルに設定用データを書き込んでおいて、それを読み込んだ方が便利、或いは保守性が高いという場合もある。
では、PowerShellスクリプトにおいて、便利な読み込み用ファイルとは何か。
俺がよく使うのは以下の3種類である。
このうち今回はXMLファイルについて書きたいと思う。
どうして、書こうと思ったか?
アクセスが楽すぎるゼ!
これに尽きる。
楽ということはつまり、扱いが便利、開発効率が高いということになるだろう。
どうやってアクセスするんや!
PowerShellからXML文字列にアクセスするのは、スゲぇ簡単だ。
System.XML.XMLDocumentクラスのデータ型にキャストして、アクセスするだけ。
マジでこんだけ。あとはXMLの各要素を参照したり、追加したりするだけだ。
▼今回のお題で使うサンプルXML
config.xml
XMLの実態はテキストファイルだ。よって、通常の*.txtファイルと同様にGet-Contentコマンドレットで読み込み、[XML]データ型にキャストする。
では、特定の要素のみを参照する場合と、すべての要素を参照する例を示してみたい。
#XMLファイルの読み込みとキャスト
[XML]$xml = Get-Content "C:¥config.xml"
#型の確認
Write-Host "▼型の確認"
$xml.GetType()
Write-Host ""
#name要素の要素番号2のデータを表示
Write-Host "▼name要素の要素番号2のデータ"
$xml.root.data.name[2]
Write-Host ""
#すべての要素を表示
Write-Host "▼すべてのデータ"
ForEach($str in $xml.root.data){
Write-Host "---------------------"
Write-Host ("名前:" + $str.name)
Write-Host ("出身:" + $str.from)
Write-Host ("職業:" + $str.job)
}
Write-Host ""
Read-Host "×ボタンで終了"
・検証のため、型確認をした。
期待通り、System.XML.XMLDocumentクラスのデータ型であることが分かる。
・添え字指定により、特定の要素を参照することができる。1番目の要素番号は0となるので、今回の例の要素番号は2となる。
・ForEachステートメントを使用すると、すべての要素にアクセスすることができる。
かくも簡単にアクセスすることができた。
PowerShell、イエーイ!