XMLDocument内の移動
XPathNaviatorクラスでは、現在参照している要素の位置を覚えており、参照位置を移動するためのMoveTOXXといういくつかのメソッド(XXはメソッドによって異なります)があります。ここでは、メソッドを使用した参照先要素の位置移動について説明します。
あらかじめ下記のように、XPathNavigatorを作成してからサンプルコードを実行してください。
PS> $xmlDoc = [xml](Get-Content population.xml -Encoding UTF8) PS> $Navi = [Xml.Xpath.XPathNavigator] $XmlDoc.CreateNavigator()

最初の子要素へ移動する
まずは下記のようにMoveToFirstChildメソッドを利用して、現在位置から見た最初の子要素へ移動します。正常に移動できた場合には、TRUEが返されます。FALSEが返された場合は、それ以上子要素がないということを意味します。
PS> $Navi.MoveToFirstChild()

現在位置(要素名)を確認するにはNameプロパティを参照します。
PS> $Navi.Name

「population_data」と返されます。
ここでもう一度MoveToFirstChildを実行すると、さらに1つ下の階層の最初の要素prefectureへ、さらに実行するとnameへ移動します。
PS> $Navi.MoveToFirstChild()

このようにMoveToFirstChildメソッドを使用すると、現在位置から見た最初の子要素へ移動することができます。
XPathNavgatorを作成した時点では、参照位置はNULLとなっておりルート要素ではありません。このため、XPathNavigatorを作成して初めてMoveToFirstChildメソッドを実行すると、対象ドキュメントのルート要素へ移動します。サンプルのファイルでは「population_data」が該当します。
同階層の次の要素/前の要素へ移動する
先ほどのMoveToFirstChildメソッドで、参照位置は "/population_data/prefecture/name" となっています。
ここで MoveToNextメソッドを実行するとpopulation要素へ移動します。
PS> $Navi.MoveToNext() PS> $Navi.Name

また、MoveToPreviousメソッドを実行すると、前の要素へ戻ります。
PS> $Navi.MoveToPrevious() PS> $Navi.Name

現在の要素から見た親要素へ移動する
MoveToParentメソッドを使用すると、「現在参照しているノードから見た親要素」へ移動することができます。
先ほどのMoveToFirstChildメソッドで、参照位置は "/population_data/prefecture/name" となっています。ここで下記のようにMoveToParentメソッドを実行します。
PS> $Navi.MoveToParent()

Nameプロパティを参照すると
PS> $Navi.Name

"prefecture"と返されます。
このように、MoveToParentメソッドを使用すると親要素へ移動することができます。
