【PowerShell】XMLデータの読み込み・書き込み方法
PowerShellによるXMLデータの読み込み・書き込み方法について記載します。
<環境>
OS:Windows10(64bit)
PSVersion:v5.1
XMLデータの読み込み
構文
Get-ContentコマンドでXMLファイルを読み込み、XmlDocumentクラスに変換します。文字コードは必要に応じて指定します。
スクリプト例
# XMLファイル読み込み
$xml = [XML](Get-Content .\test.xml -Encoding UTF8)
# XMLの要素、属性表示
Write-Output $xml.Root.Pokemon.Name
Write-Output $xml.Root.Pokemon.Level
Write-Output $xml.Root.Pokemon.Abilities[0]
Write-Output $xml.Root.Pokemon.Abilities[1]
Write-Output $xml.Root.Pokemon.Parameter.HP
Write-Output $xml.Root.Pokemon.Parameter.ATK
Write-Output $xml.Root.Pokemon.Parameter.DEF
XMLファイル
読み込むXMLファイルの内容は以下になります。
<Root>
<Pokemon Level="100">
<Name>ピカチュウ</Name>
<Abilities>でんきショック</Abilities>
<Abilities>ボルテッカー</Abilities>
<Parameter>
<HP>70</HP>
<ATK>50</ATK>
<DEF>20</DEF>
</Parameter>
</Pokemon>
</Root>
XMLデータの書き込み(XmlDocument)
XmlDocumentクラスでXMLデータを作成してファイル出力します。
構文
- XmlDocument.CreateElement
- XmlDocument.InnerText
- XmlDocument.SetAttribute
- XmlDocument.AppendChild
- XmlDocument.Save
XMLElementを作成します。(XML要素作成)
XMLElementのテキストコンテンツを設定します。
XMLElementに属性とその値を設定します。
指定した要素を他の要素の子として追加します。
XmlDocumentを指定したファイルに保存します。
スクリプト例
XmlDocumentクラスでXMLデータを作成してファイル出力します。
# XmlDocument作成
$xmlDoc = New-Object System.Xml.XmlDocument
# Root要素作成
$xmlRoot = $xmlDoc.CreateElement("Root")
$xmlDoc.AppendChild($xmlRoot)
# Pokemon要素作成、Level属性付与
$xmlPokemon = $xmlDoc.CreateElement("Pokemon")
$xmlPokemon.SetAttribute("Level", 100)
$xmlRoot.AppendChild($xmlPokemon)
# Name要素作成
$xmlName = $xmlDoc.CreateElement("Name")
$xmlName.InnerText = "ピカチュウ"
$xmlPokemon.AppendChild($xmlName)
# Abilities要素作成
$abilities = @("でんきショック", "ボルテッカー")
$abilities | ForEach-Object {
$xmlAbility = $xmlDoc.CreateElement("Abilities")
$xmlAbility.InnerText = $_
$xmlPokemon.AppendChild($xmlAbility)
}
# Parameter要素作成
$xmlParameter = $xmlDoc.CreateElement("Parameter")
$xmlPokemon.AppendChild($xmlParameter)
# HP、ATK、DEF要素作成
$parameter = @{
HP = 70
ATK = 50
DEF = 20
}
$parameter.Keys | ForEach-Object {
$xmlElement = $xmlDoc.CreateElement($_)
$xmlElement.InnerText = $parameter[$_]
$xmlParameter.AppendChild($xmlElement)
}
# XMLファイル保存
$xmlDoc.Save(".\test.xml")
XMLファイル
書き込んだXMLファイルの内容は以下になります。
<Root>
<Pokemon Level="100">
<Name>ピカチュウ</Name>
<Abilities>でんきショック</Abilities>
<Abilities>ボルテッカー</Abilities>
<Parameter>
<DEF>20</DEF>
<ATK>50</ATK>
<HP>70</HP>
</Parameter>
</Pokemon>
</Root>
XMLデータの書き込み(ConvertTo-Xml)
構文
PowerShellはPSObjectをXMLデータに変換するConvertTo-Xmlコマンドがあります。指定できるパラメータは以下になります。
- -InputObject
- -As
- -Depth
- -NoTypeInformation
変換するPSObjectを指定します。
XMLデータの出力形式を以下から指定します。
String :文字列
Stream :文字列の配列
Document:XmlDocumentクラス
String :文字列
Stream :文字列の配列
Document:XmlDocumentクラス
XMLデータの階層を指定します。デフォルトは1です。
XMLデータの型情報を省略します。
スクリプト例
$PSObject = [PSCustomObject]@{
Root = [PSCustomObject]@{
Pokemon = [PSCustomObject]@{
Level = 100
Name = "ピカチュウ"
Abilities = @("でんきショック", "ボルテッカー")
Parameter = [PSCustomObject]@{
HP = 70
ATK = 50
DEF = 20
}
}
}
}
# xml形式の文字列に変換
$xmlStr = ConvertTo-Xml -InputObject $PSObject -As String -Depth 4 -NoTypeInformation
# ファイルに書き込み
Set-Content -Path ".\test.xml" -Value $xmlStr -Encoding UTF8
XMLファイル
書き込んだXMLファイルの内容は以下になります。
<?xml version="1.0" encoding="utf-8"?>
<Objects>
<Object>
<Property Name="Root">
<Property Name="Pokemon">
<Property Name="Level">100</Property>
<Property Name="Name">ピカチュウ</Property>
<Property Name="Abilities">
<Property>でんきショック</Property>
<Property>ボルテッカー</Property>
</Property>
<Property Name="Parameter">
<Property Name="HP">70</Property>
<Property Name="ATK">50</Property>
<Property Name="DEF">20</Property>
</Property>
</Property>
</Property>
</Object>
</Objects>
ConvertTo-Xmlコマンドにより作成されるXMLデータ構成は固定となります。
XmlDocumentクラスは必要に応じて要素や属性、階層を設定できるため柔軟にXMLデータ構成を作成できます。
XmlDocumentクラスは必要に応じて要素や属性、階層を設定できるため柔軟にXMLデータ構成を作成できます。