属性を取得する
ここでは属性を取得する方法について説明します。
特定の要素の属性を取得するにはXmlElementオブジェクトget_Attributes()メソッドを使用します。このメソッドはXmlAttributeCollectionというコレクションを返すのでforeachによる取り出しが可能です。
下記はforeachによりroot要素が持つ属性すべての属性名とその値を表示します。属性名の取得にはget_Name()メソッドを、属性値の取得にはget_Value()メソッドを使用します。
PS> foreach ( $attr in $xmlDoc.root.get_Attributes() )
>> {
>> $attr.get_Name() #属性名の表示
>> $attr.get_Value() #属性値の表示
>> }
>>

要素を置換する
ここでは要素を置換する方法について説明します。
要素は、要素名とその値を別のものに置換することが可能です。例として、要素名child1をNewChild1に、その値を100に置換する例を示します。
はじめに「NewChild1」という名称のXmlElementオブジェクトを作成し$NewElementへ代入します。
次に、$NewElementが持つset_InnerText()メソッドを使用して要素の値「100」をセットします。
最後にroot要素のReplaceChild()メソッドを使用して要素の置換を行います。このとき、置き換え先の要素は$root.get_ChildNodes()で取得した最初の要素(Item(0))とすることでchild1を指定したことになります。
PS> $NewElement = $xmlDoc.CreateElement("NewChild1")
PS> $NewElement.set_Innertext("100")
PS> $xmlDoc.root.ReplaceChild($NewElement, $xmlDoc.root.get_ChildNodes().Item(0))
PS> $xmlDoc.root

指定した子要素を削除する
ここでは子要素を削除する方法について説明します。
指定した子要素を削除するにはRemoveChild()メソッドを使用します。引数に削除する子要素を指定します。
下記はget_ChildNode()メソッドで取得した0番目の要素、つまりNewChild1を削除します。
PS> $root.RemoveChild($root.get_ChildNodes().Item(0)) PS> $root

まとめ
今回は、既存のXMLデータからのデータ取得や要素の変更などについて説明しました。各要素を操作するメソッド自体は非常にシンプルであり、習得することは容易です。ぜひこれらの操作方法を身につけていただければと思います。
次回は、XPathNavigatorクラスを用いて効率のよいデータ検索を行う方法について説明します。どうぞお楽しみに。
参考文献
- HIRO's.NET
- PowerShell from Japan!!
- 『Windows PowerShell ポケットリファレンス』 牟田口大介 著、技術評論社、2008年4月
- 『Windows PowerShell クックブック』 Lee Holmes 著、マイクロソフト株式会社ITプロ エバンジェリストチーム 監訳/監修、菅野良二 訳、オライリージャパン、2008年10月
