SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows PowerShell 活用編

Windows PowerShell 活用編(10)
XPathNavigatorクラスの活用2

ダウンロード population.zip (484.0 B)

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メソッドを使用すると親要素へ移動することができます。

次のページ
新しい要素の挿入

この記事は参考になりましたか?

Windows PowerShell 活用編連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3851 2009/05/11 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー