PowershellではXMLファイルを簡単に扱うことができます。XMLファイルを見やすく別のファイルに保存するときなどに利用します。
XMLファイルの内容をオブジェクトにする
XMLの構造はツリー構造です。フォルダ構造とほぼ同じなのでフォルダのPAHTを記載するようにデータにアクセスします。
例えばPATHをオブジェクト風に記載すると以下のようになります。
・PATH
C:/Users/test/Desktop/test
↓
・オブジェクト風
pathObj.Users.test.Desktop.test
では実際にpowershellを利用しXMLをオブジェクト化します。
以下のサンプルXMLをデスクトップにtest.xmlファイルとして保存してください。
サンプルXML
<TestList version="2" revision="1"> <Item category="test"> <ID type="int">1</ID> <Name type="string">テスト1</Name> <Description type="text">テスト1の内容</Description> </Item> <Item category="test"> <ID type="int">2</ID> <Name type="string">テスト2</Name> <Description type="text">テスト2の内容</Description> </Item> <Item category="test"> <ID type="int">3</ID> <Name type="string">テスト3</Name> <Description type="text">テスト3の内容</Description> </Item> <Item category="news"> <ID type="int">4</ID> <Name type="string">ニュース1</Name> <Description type="text">ニュース1の内容</Description> </Item> <Item category="news"> <ID type="int">5</ID> <Name type="string">ニュース2</Name> <Description type="text">ニュース2の内容</Description> </Item> <Item category="news"> <ID type="int">6</ID> <Name type="string">ニュース3</Name> <Description type="text">ニュース3の内容</Description> </Item> </TestList>
コードを記載するためtest.ps1ファイルを作成します。
test.ps1を右クリック→編集をクリックしファイルを開きます。
以下のコードをコピペします。
# 現在のパス取得 $scriptPath = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition) # xmlファイルのPATH $source = "$scriptPath\test.xml" # xmlオブジェクト作成 $xmlObj = (Get-Content -path "$source") # データはループさせて取得 foreach ($List in $xmlObj.TestList) { foreach ($item in $List.Item) { echo $item.Name.innerText } }
説明
1.オブジェクト化
$scriptPath = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition) $source = "$scriptPath\test.xml" $xmlObj = (Get-Content -path "$source")
XMLファイルをオブジェクト化するためXMLファイルのPATHを取得します。
ファイルのデータを一行づつ取得するGet-Contentコマンドに使用します。これでは普通テキストファイルのような処理になっていまいますのでXMLを扱えるように全体をXMLにキャストします。
2.要素の値を取得
foreach ($List in $xmlObj.TestList) { foreach ($item in $List.Item) { echo $item.Name.innerText } }
要素の値を取得する場合はinnerTextプロパティを使用します。
オブジェクト.innerText
3.属性の値を取得
foreach ($List in $xmlObj.TestList) { foreach ($item in $List.Item) { echo $item.GetAttribute("category") } }
属性の値を取得する場合はGetAttributeメソッドを使用します。
オブジェクト.GetAttribute(“属性名”)
特定の条件により処理する
if文を利用し特定の条件にマッチした値のみ取得します。
例ではItemのcategory属性の値が「test」になっている要素の値を取得します。
# 現在のパス取得 $scriptPath = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition) # xmlファイルのPATH $source = "$scriptPath\test.xml" # xmlオブジェクト作成 $xmlObj = (Get-Content -path "$source") # データはループさせて取得 foreach ($List in $xmlObj.TestList) { foreach ($item in $List.Item) { if($item.GetAttribute("category") -eq "test"){ echo $item.Name.innerText } } }
「クラウドテック」です。 掲載案件では平均月60万、週3~4日勤務の案件が豊富で生活スタイルに合わせた働き方を設計できます。 また福利厚生が充実し旅行、レジャー、家事代行、ヘビーシッター、健康診断など100種類以上を無料で使えます。
- 97%がリモートのお仕事
- 週4日、週3日OKのお仕事多数
- 登録社数74万件業界トップクラス
- 2〜4週間程度でお仕事決定