SHOEISHA iD

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

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

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

Windows PowerShell 活用編

Windows PowerShell 活用編(9)
XPathNavigatorクラスの活用1

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

単純な選択

 基本使用方法が分かったので、いくつかの例を示しながら要素の選択方法について見ていきたいと思います。

パスを指定した要素の取り出し

 下記はpopulation_data要素の孫要素であるname要素をすべて取得します。このときのXPath式は /population/prefecture/name となります(先頭の"/"はルート要素を表します)。結果としてこのXMLデータが持つ都道府県名すべてが表示されます。

$nodes =  $navi.Select("/population_data/prefecture/name")
While ( $nodes.MoveNext() )
{
  $nodes.Current.Value
}

特定の属性を持つ要素の取り出し

 サンプルデータのprefecture要素には属性districtがあります。districtが「関東」となっている県名を取得するには XPath式に/population_data/prefecture[@district='関東']/nameを指定します。prefecture[@district='関東']prefecture要素のdistrict属性が「関東」に等しいものという意味です。

 下記は結果として、属性が「関東」の要素値が表示されます。

$nodes =  $navi.Select("/population_data/prefecture[@district='関東']/name")
While ( $nodes.MoveNext() )
{
  $nodes.Current.Value
}

要素名を指定した取り出し

 指定した要素名を持つ要素を取り出すことも可能です。たとえば要素名が「name」のものすべてを取得するにはXPath式に//nameと指定します。XPath式の先頭に「//」がある場合は現在のデータの中から再帰的に「name」という要素を探し出します。

 下記を実行すると要素名が「name」のデータをすべて取得します。

$nodes =  $navi.Select("//name")
While ( $nodes.MoveNext() )
{
  $nodes.Current.Value
}

 実行結果を見ると分かるように県名以外に「盛岡市」というデータが表示されていることが分かります。これは岩手県を表すデータの下に

  <municipality>
   <name>盛岡市</name>
   <population>298692</population>
  </municipality>

 というXMLデータがあり、この中にも「name」という要素があるためです。

件数の取得

 XPath式を指定して取得できる要素の件数を取得するにはCountプロパティを使用します。 たとえば先ほどのXPath式//nameの件数を取得するには下記のようにします。

$nodes =  $navi.Select("//name")
$nodes.Count

次のページ
比較演算子を用いた選択

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

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/3760 2009/04/10 14:00

イベント

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

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

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

メールバックナンバー