PowershellでXMLファイルを読み込む方法を紹介します。
XMLファイルの準備
XMLファイルはメモ帳で作成することが出来ます。
宣言
1行目にXMLファイルであることを宣言する文を記載します。
<?xml version="1.0" encoding="UTF-8"?>
versionは1.0と1.1がありますが、現在はまだ1.0が主流のようです。encodingはファイルのエンコード形式を指定します。encodingは省略可能ですが、省略した場合はUTF-8かUTF-16となるようです。基本的に明示的に指定するのがベターです。
XML本文
XMLはすべて要素からなります。開始タグ<>と終了タグ</>で値をくくります。
<要素>値</要素>
またXMLはツリー構造で要素をネストすることが可能です。
<ルート要素>
<サブ要素1>1</サブ要素1>
<サブ要素2>2</サブ要素2>
</ルート要素>
これらを踏まえ、以下のサンプルをPowershellから読み込みます。
<?xml version="1.0" encoding="UTF-8"?>
<Friends>
<Person>
<Name>阿部</Name>
<Age>25</Age>
</Person>
<Person>
<Name>山田</Name>
<Age>31</Age>
</Person>
</Friends>
PowershellからXMLファイルを読み込む
変数に格納
Get-ContentコマンドレットでXMLファイルを読み込みます。読み込む際にXMLにキャストします。
今回は変数「$XML」に格納して色々見ていきたいと思います。
PS C:\> $XML = [XML](Get-Content C:\Sample1.xml)
この時点で変数「$XML」にSystem.Xml.XmlDocumentタイプのオブジェクトとして格納されます。
XMLデータの読み出し
子要素であるPersonの情報を読み出すには以下のように指定します。
PS C:\>$XML.Friends.Person
Name Age
---- ---
阿部 25
山田 31
これらは1オブジェクトずつ配列に格納されます。
PS C:\> $XML.Friends.Person[0]
Name Age
---- ---
阿部 25
PS C:\> $XML.Friends.Person[1]
Name Age
---- ---
山田 31
さらに子要素の値を取得するには以下のように指定します。
PS C:\> $XML.Friends.Person.age
25
31
指定した条件のデータを取り出す
30歳以上のPersonを取り出す例です。
PS C:\> $XML.Friends.Person | Where{$_.Age -gt 30}
Name Age
---- ---
山田 31
Foreach文とも相性が良く、使い勝手が非常にいいです。
コメント