SHOEISHA iD

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

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

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

Cyber Luxeonで学ぶXMLDB入門

XMLデータの操作(前編) ~ XPath、XQuery

Cyber Luxeonで学ぶXMLDB入門 第2回


XPath(2/2)

ステップ(Step)

 ステップは、以下に示したパターンで記述されます。軸を使った形式のステップは「軸ステップ(AxisStep)」と言います。2つ目の書式は述語を省略したパターンです。

  1. 軸 + ノードテスト[述語(繰り返し可能)]
  2. 軸 + ノードテスト
  3. フィルタ

 以下では、ステップの構成要素である、軸、ノードテスト、述語、フィルタについて説明します。

軸(Axis)

 軸とは、ステップを使用して選択するノードとコンテキストノードとの間のツリー上の位置関係を指定する方法のことです。軸の指定方法には、XMLツリーの順方向に向かう指定方法(前方軸)とXMLツリーの逆方向に向かう指定方法(後方軸)があります。軸は「child::」のように、軸の名前と「::」の組み合わせで記述します。

軸の種類

 以下の表に、軸の種類を方向別にまとめました。

前方軸の種類
説明
childコンテキストノードの子ノードの集合。
descendantコンテキストノードの子孫ノードの集合。
attributeコンテキストノードの属性の集合。
selfコンテキストノード自身の集合。
descendant-or-selfコンテキストノードとその子孫ノードの集合。
following-siblingコンテキストノードの後ろにあるすべての兄弟ノードの集合。
followingコンテキストノードと同じドキュメント内にあり、ドキュメント順でコンテキストノード以降にあるすべてのノードの集合。
namespaceコンテキストノードの名前空間の集合。
後方軸の種類
説明
parentコンテキストノードの親ノードの集合。
ancestorコンテキスト ノードの祖先ノードの集合。
preceding-siblingコンテキストノードの前にあるすべての兄弟ノードの集合。
precedingコンテキストノードと同じドキュメント内にあり、ドキュメント順でコンテキストノードより前にあるすべてのノードの集合。
ancestor-or-selfコンテキストノードとその祖先ノードの集合。
軸の省略記述

 軸のうちの以下に示したものは、省略した形で記述することができます。

  1. child:: → 記述なし
  2. attribute::ノードテスト → 「@ノードテスト」
  3. parent:: → 「..」

 以下は、child::を省略した例です。

child::の省略(通常表記)
/child::players/child::player[child::name= 'イチロー']
child::の省略(省略形)
/players/player[name.='イチロー']

ノードテスト(NodeTest)

 ノードテストとは、選択するノードの種類や名前を指定する方法のことで、軸によって選択されたノード集合に、さらに条件を付加します。ノードテストは、以下の2通りによって表現されます。

  1. ノードの種類(要素、属性、テキスト、ドキュメント、処理命令)
  2. ノード名(QNameまたはワイルドカード「*」)

 以下の表に、ノードテストをノードの種類で指定する方法の主なものをまとめました。

ノードテストのノード型指定
ノード型の指定説明
node()すべてのノードにマッチする。
text()すべてのテキストノードにマッチする。
comment()すべてのコメントノードにマッチする。
element()すべての要素ノードにマッチする。
attribute()すべての属性ノードにマッチする。
document-node()すべてのドキュメントノードにマッチする。

述語(Predicate)

 述語とは、ノードテストで選出されたノード集合を、さらに振り分けするために該当ノードの条件を記述する方式です。述語は以下の書式に示すように、式を"["と"]"で囲んで記述します。

述語 ::= "[" 式 "]"

フィルタ(Filter)

 フィルタはそれ自体で、ステップを構成することができ、基本式と述語の組み合わせで構成されます。

フィルタ ::= 基本式[述語(繰り返し可能)]

演算子

 XPathでは、数値計算や、比較、論理条件を指定するための演算子を用意しています。以下に演算子を種類別にまとめました。

数式(Arithmetic Expressions)

 数式は、加減剰余の四則演算で使用する演算子を定義しています。以下の表に四則演算で使用する演算子をまとめました。

比較式
演算子意味使用例
+ 加算$a + $b
-減算$a - $b
*乗算$a * $b
div除算$a div $b
mod剰余演算$a mod $b

比較式(Comparison Expressions)

 比較式は、2つの値を比較します。以下の表に比較式の演算子をまとめました。

比較式
演算子意味使用例
eq または = 等しい$a eq $b または $a=$b
ne または !=等しくない$a ne $b または $a!=$b
lt または <より小さい$a lt $b または $a<$b
le または <=以下$a le $b または $a<=$b
gt または >より大きい$a gt $b または $a>$b
ge または >=以上$a ge $b または $a>=$b

論理式(Logical Expressions)

 論理式は、条件式をand、orで判定します。以下の表に論理式の演算子をまとめました。

論理式
演算子意味使用例
and 2つの条件をAnd条件で真偽値判定する条件1 and 条件2
or2つの条件をOr条件で真偽値判定する条件1 or 条件2

次のページ
XQuery

修正履歴

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

Cyber Luxeonで学ぶXMLDB入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/922 2007/06/13 10:07

おすすめ

イベント

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

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

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

メールバックナンバー