論理演算子を用いた選択
ここからは論理演算子を指定して条件に合致するデータの選択方法について学びます。
論理演算子には下記のようなものがあります。
| 演算子 | 意味 |
| or | 各オペランドを評価してどちらかが満たされているときにtrueを返す |
| and | 各オペランドを評価して両方が満たされているときにtrueを返す |
人口が500万人以上かつ1000万人以下の県名を取得する
人口が500万以上は../population>=5000000、人口が1000万以上は../population<=10000000、と表すことができます。また両方を満たしているデータを取得すると言うことは論理演算子「and」を使用すればよいので、この場合のXPath式は下記の通りとなります。
/population_data/prefecture/name[../population>=5000000 and ../population<=10000000]
$nodes = $navi.Select("/population_data/prefecture/name[../population>=5000000 and ../population<=10000000]")
while ( $nodes.MoveNext() )
{
$nodes.Current.Value
}

計算結果を取得する
XPathNavigatorのEvaluateメソッドを使用すると計算を行うことが可能です。
すべての県の合計人口を求める
合計値を求めるにはsum関数を使用し、下記のようにしてデータを取得します。
$navi.Evaluate("sum(/population_data/prefecture/population)")

平均人口を求める
平均を求めるためにすべての県の人口を県の数で割って求めます。
合計は先ほど説明したようにsum関数を使用し、割り算にはdiv関数を使用します。また県の数はcount関数で求めます。
$navi.Evaluate("sum(/population_data/prefecture/population) div count(/population_data/prefecture/population)")

まとめ
今回は、PowerShellでXPathNavigatorクラスによる様々なデータの検索方法と演算の実行について説明しました。XPathNavigatorクラスとXPath式を利用することで効率の良いデータの検索が行えることを実感していただけたかと思います。
次回は、XPathNavigatorクラスを利用したデータの編集方法について説明します。どうぞお楽しみに。
参考文献
- HIRO's.NET
- PowerShell from Japan!!
- 『Windows PowerShell ポケットリファレンス』 牟田口大介 著、技術評論社、2008年4月
- 『Windows PowerShell クックブック』 Lee Holmes 著、マイクロソフト株式会社ITプロ エバンジェリストチーム 監訳/監修、菅野良二 訳、オライリージャパン、2008年10月
