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

1. はじめに 

これまでのシリーズでは、以下の内容を解説してきました。 

  1. なぜXMLは今でも大規模システムで使われているのか 
  1. XMLの構造:element, attribute, namespace 
  1. 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