XPathとは何か?SQLのようにXMLデータを「クエリ」する方法

こんにちは!私の名前はヴオンです。
株式会社メディアフュージョンで、XML関連製品の開発を担当しているベトナム出身のエンジニアです。
XMLに興味のある方や、XMLを利用されている方に、これまでに蓄積してきた経験を共有できればと思っています。
1. はじめに
これまでのシリーズでは、以下の内容を解説してきました。
- なぜXMLは今でも大規模システムで使われているのか
- XMLの構造:element, attribute, namespace
- DTD と XSD による XML データ構造の制御
XMLの構造が正しく定義され、validateされている状態になった次に、
実際のシステム開発で必ず出てくる疑問があります。
大きくて複雑なXMLファイルの中から、
必要なデータだけを正確に取得するにはどうすればよいのか?
この問題を解決するのが XPath です。
XPathは、SQLのような感覚で
XMLデータを検索・抽出するための技術です。

2. XPathとは?
XPath(XML Path Language) は、XMLドキュメント内の node を
位置や条件によって指定・取得するための言語です。
主な目的は以下の通りです。
- XML内の特定の node を取得する
- 条件に一致するデータをフィルタリングする
- Element, attribute, text, comment などを操作する
XPathはプログラミング言語ではなく、
ツリー構造に対するクエリ言語です。
以下の技術では、XPathが中核として利用されています。
- XSLT
- XQuery
- DOM API
- SOAP / Web Service
- XMLのテスト・検証ツール
3. データとしてのXML
次のXMLを例に考えてみます。

このXMLをデータ構造として見ると、
以下のようなテーブルと同じ意味を持ちます。
| id | customer | amount |
| 1001 | Tanaka | 5000 |
| 1002 | Suzuki | 1200 |
XPathは、このような ツリー構造のデータ に対して
SQLのような形でクエリを実行できます。
4. XPath と SQL の比較
| 目的 | SQL | XPath |
| 全件取得 | SELECT * FROM orders | /orders/order |
| 条件検索 | WHERE amount > 10000 | /orders/order[amount > 10000] |
| 特定項目取得 | SELECT customer | /orders/order/customer |
| ID指定 | WHERE id = '1001' | /orders/order[@id='1001'] |
5. XPathの基本構文
5.1 Absolute path と Relative path
- Absolute path:ルート(/)から指定する

- Relative path:現在の node を起点に指定する

Absolute path は構造が固定されたXML向きで、
Relative path は XSLT や DOM 操作でよく使われます。
5.2 / と // の違い
- / :直下の child node
- //:階層を問わず検索

5.3 attribute の取得
attribute は @ を使って指定します。

5.4 Predicate(条件指定)
Predicate は [] を使って条件を指定します。

複数条件の指定も可能です。

6. XPathにおける node の種類
XPathでは、さまざまな node type を扱います。
| Node type | 説明 |
| element | XML要素 |
| attribute | 属性 |
| text | テキスト |
| comment | コメント |
| namespace | 名前空間 |
7. Axis: node 間の関係を使ったクエリ
XPathでは、node 間の関係を Axis として明示的に指定できます。
| Axis | 意味 |
| child:: | 子 node |
| parent:: | 親 node |
| ancestor:: | 祖先 node |
| descendant:: | 子孫 node |
| following-sibling:: | 後続の兄弟 node |
| preceding-sibling:: | 前の兄弟 node |
8. XPathの限界
XPathは以下の用途に非常に適しています。
- データ取得
- フィルタリング
- node の特定
一方で、以下には向いていません。
- 複雑な join
- 高度な aggregation
- 大規模な update 処理
その場合は、以下の技術を検討します。
- XQuery
- XSLT
9. まとめ
- XPathはXMLデータを扱うための中核技術
- SQLに似た感覚でXMLをクエリできる
- 大規模・業務システムでは今でも必須スキル
- namespace の理解が重要なポイント
XMLが「データ構造を定義する技術」だとすれば、
XPathはその構造を正確に使いこなすための鍵です。
10. 参考文献
https://www.w3schools.com/xml/xpath_intro.asp
https://developer.mozilla.org/en-US/docs/Web/XML/XPath

