【PowerShell】XMLデータの読み込み・書き込み方法

【PowerShell】XMLデータの読み込み・書き込み方法

PowerShellによるXMLデータの読み込み・書き込み方法について記載します。

<環境>
OS:Windows10(64bit)
PSVersion:v5.1

XMLデータの読み込み

構文
[XML](Get-Content <XMLファイルパス> -Encoding <文字コード>)

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
  • XMLElementを作成します。(XML要素作成)

  • XmlDocument.InnerText
  • XMLElementのテキストコンテンツを設定します。

  • XmlDocument.SetAttribute
  • XMLElementに属性とその値を設定します。

  • XmlDocument.AppendChild
  • 指定した要素を他の要素の子として追加します。

  • XmlDocument.Save
  • 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)


構文
ConvertTo-Xml -InputObject <PSObject> -As <出力形式> -Depth <Int> -NoTypeInformation

PowerShellはPSObjectをXMLデータに変換するConvertTo-Xmlコマンドがあります。指定できるパラメータは以下になります。

  • -InputObject
  • 変換するPSObjectを指定します。

  • -As
  • XMLデータの出力形式を以下から指定します。
     String  :文字列
     Stream  :文字列の配列
     Document:XmlDocumentクラス

  • -Depth
  • XMLデータの階層を指定します。デフォルトは1です。

  • -NoTypeInformation
  • 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データ構成を作成できます。


Next Post Previous Post