SHOEISHA iD

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

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

Windows PowerShell 活用編

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

  • このエントリーをはてなブックマークに追加

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

 Windows PowerShellはXMLデータを容易に取り扱うことができるように設計されています。今回はXPathNavigatorクラスを使用して、効率よくXMLデータを取得する方法について説明します。

  • このエントリーをはてなブックマークに追加

はじめに

 前回まではXmlDocumentオブジェクトを作成し、XMLデータを操作する方法について学んできました。今回からXPathNavigatorクラスを利用して、効率よくXMLデータを操作する方法について学びます。

 サンプルのコードを動作させるには、記事に添付されている「population.xml」を使用します。必要に応じて「population.zip」をダウンロードし、解凍してお使いください。

対象読者

  • Windows PowerShellの基本操作が行える方
  • XMLについて基本知識を有する方

サンプルファイルについて

 サンプルのpopulation.xmlは、県別の人口データを格納したファイルとなっています(説明用に作成したものです)。

 データには、ルート要素として<population_data>、子として1つの県を表す<prefecture>要素があります。<prefecture>には属性districtがあり、これは地方を表しています。

 また<prefecture>は子として県名を表す<name>と人口を表す<population>を持ちます。さらに、岩手県を表す要素には子要素として<municipality>を持ち、市町村名を表す<name>と人口を表す<population>があります。

 構成は下記の通りです。

<population_data> <!-- ルート要素 -->
    <prefecture district="地方名">  <!-- 1つの県を表す -->
        <name>県名</name>
        <population>人口</population>
        <municipality> <!-- 岩手県のところだけにある要素 -->
            <name>市町村名</name>
            <population>人口</population>
        </municipality>
    </prefecture>
</population_data> 

XPathNavigatorクラスとXPath言語について

 XPathNavigatorクラスはXML Path言語を使用して、XML データ内を移動したり XML データを編集したりということを容易に行うことができます。ではXML Path言語とはなんでしょうか?

 XML Path言語(以降、XPath)は、URLで使用されているようなパス表記法を用いたXML専用のクエリです。前回までに紹介したXmlDocumentオブジェクトでは、データを取得するのに「xxの要素のyy要素」のように、1つ1つ階層を指定したデータの取り出しを行う必要がありました。しかし、XPathを用いれば少ない操作で特定の要素の取り出しや編集が行えるようになります。

XPathNavigatorオブジェクトの作成

 XPathNavigatorオブジェクトはXmlDcumentXPathDocumentから作成することができます。今回はXmlDocumentから作成します。

 まず下記のようにしてサンプルのXMLファイルを読み込み、XmlDocumentオブジェクトを作成します。

PS> $xmlDoc = [xml](Get-Content population.xml -Encoding UTF8)

 次に、今作成した$xmlDocからCreateNavigator()メソッドを使用して、XPathNavigatorオブジェクトを作成します。

PS> $Navi =[Xml.Xpath.XPathNavigator] $XmlDoc.CreateNavigator()

XMLデータの選択

XPathNavigatorの基本使用方法

 作成したXPathNavigatorオブジェクトを使用してデータを選択するにはSelect()メソッドを使用します。このメソッドには引数としてXPath式を指定する必要があります。

 またSelect()メソッドの結果はXPath式でヒットしたノードのセット(XPathNodeIterator)を返します。このノードを1件ずつ処理する場合にはMoveNext()メソッドを使用した取り出しが有効です。

 以下に基本的な使用方法を示します。

# XPathを使用してノードを取得
$nodes = $navi.Select(XPath式)

# MoveNext()メソッドによる値の取り出し
While ( $nodes.MoveNext() )
{
  #ここに各要素を処理するコマンドを記述
}

 次にWhile() { ~ }内で各ノードにアクセスする方法について説明します。While() { ~ }内では処理中のノードはCurrentで表されます。また要素名は$nodes.Current.Name、要素の値は$nodes.Current.Valueでアクセスすることができます。

注意

 MoveNextメソッドでデータを取り出すとその変数の中身(ここの例では$nodes)は空となり、2度目以降の取り出しは行うことができないので注意が必要です。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
単純な選択

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

  • このエントリーをはてなブックマークに追加
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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング