はじめに
XMLは設定ファイルやデータベースなど、昨今では至る所で使用されています。XMLファイルからデータを取得したり書き込んだりという作業は、テキストエディタや専用のエディタ、または自作のツールを使用するなど、さまざまな方法で行えますが、PowerShellもXMLファイルを容易に扱うことができるように設計されています。
今回はPowerShellでのXML操作方法について説明します。
対象読者
- Windows PowerShellの基本操作が行える方。
- XMLについて基本知識を有する方
データ型と型変換
PowerShellでは明示的にデータ型を表すことができるのですが、その中の1つに [XML]
というXML用のデータ型エイリアスがあります。これは.NETのデータ型System.Xml.XmlDocument
に対応するものです。
たとえば下記のようなXMLデータを文字列$str
へ代入します。
<root> <child1>1</child1> <child2>2</child2> </root>
PS> $str = "<root><child1>1</child1><child2>2</child2></root>" PS> $str.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String System.Object
このようにして代入したデータは、あくまでも文字列でありPowerShellの中ではXMLデータとして扱われません。
上記を少し変更し、下記のように文字列の先頭に[XML]
を付けることで、この文字列は[XML]
型になります。このようにある型を別の型へ変更することを型変換またはキャストと言います(以降キャストと呼ぶことにします)。
PS> $xmlDoc = [xml]"<root><child1>1</child1><child2>2</child2></root>"
このようにして代入したデータはPowerShellではXmlDocument
オブジェクトとして取り扱えるようになります。
もう1つ例を紹介します。
下記はXMLファイルをGet-Content
コマンドレットで読み込み[XML]
キャストしています。通常Get-Content
を使用して読み込んだファイルはテキストデータとなりますが、 [XML]
キャストすると、XmlDocument
オブジェクトとして取り扱うことができるようになります。
PS> $xmlDoc = [XML](Get-Content Sample.xml)