XPath

本ページには広告が含まれています。

XPathとは

XPath(XML Path Language)は、XMLやHTMLドキュメントのツリー構造から特定の要素や属性を選択するための言語です。XPathを使用すると、文書内の要素や属性を効率的に検索、抽出することができます。

ロケーションパス

文書内で特定のノードの位置を決めるための式をロケーションパスといいます。ロケーションパスはURLと同じように/を繋げて書きます。ロケーションパスはルートノードを起点とする絶対ロケーションパスと、現在の位置を起点とする相対ロケーションパスの2種類があります。

絶対パスは、XMLドキュメントのルート要素から始まるパスです。パスの先頭にスラッシュ (/) を付けて記述します。

UWSC
/html/body/div

相対パスは、現在のノード(コンテキストノード)から始まるパスです。パスの先頭にスラッシュを付けずに記述します。

UWSC
body/div

絶対パスはルート要素から書いているとネスト構造で深い要素を指定するときに長くなってしまいます。

UWSC
/html/body/div/div/div/div[@id='main']

このとき途中のノードまでを省略する短いXPathという書き方もあります。

短いXPathは省略する箇所を//で記述します。

UWSC
//div[@id='main']

関数

XML文書やHTML文書から特定のデータを抽出するために使用します。

関数説明
boolean()式を評価し、trueまたはfalseを返します。
ceiling()小数を評価し、その小数以上の最も小さい整数を返します。
choose()正負値に基づいて、指定されたオブジェクトのうち1つを返します。
concat()2つ以上の文字列を連結し、その結果として得られる文字列を返します。
contains()第一引数の文字列に第二引数の文字列が含まれているかどうかを判定し、論理値trueまたはfalseを返します。
count()ノード集合に含まれるノードの数を返します。
current()
document()
element-available()要素が利用可能かどうかを判断し、trueまたはfalseを返します。
false()論理値falseを返します。
floor()小数を評価し、その小数以下の最も大きい整数を返します。
format-number()数値を評価し、指定された書式で数値を表す文字列を返します。
function-available()指定された関数が使用可能かどうかを判断し、論理値trueまたはfalseを返します。
generate-id()指定されたノード集合の最初のノードの一意のIDを生成し、そのIDを含む文字列を返します。
id()渡されたIDに一致するノードを探し、識別されたノードを格納するノード集合を返します。
key()指定されたキーに対して指定された値を持つノードのノード集合を返します。
lang()コンテキストノードの言語が渡された言語に一致するかどうかを判定し、論理値trueまたはfalseを返します。
last()
local-name()与えられたノード集合内の最初のノードのローカル名(local name)を表す文字列を返します。
name()与えられたノード集合内の最初のノードのQNameを表す文字列を返します。
namespace-uri()指定されたノード集合内の最初のノードの名前空間URIを表す文字列を返します。
normalize-space()文字列から前後のホワイトスペースを取り除き連続するホワイトスペースを1つのスペースに置き換えて、その結果として得られる文字列を返します。
not()式を論理値として評価し、その逆の値を返します。
number()オブジェクトを数値に変換し、その数値を返します。
position()特定位置の要素を指定します。
round()与えられた数値に最も近い整数を返します。
starts-with()第一引数の文字列が第二引数の文字列で始まるかどうかを調べ、trueまたはfalseを返します。
string()
string-length()引数に指定された文字列の文字数を返します。
substring()文字列の一部を切り出します。
substring-after()文字列内で部分文字列よりも後ろにある文字列を返します。
substring-before()文字列内で部分文字列よりも前にある文字列を返します。
sum()
system-property()指定されたシステムプロパティを表すオブジェクトを返します。
translate()
true()論理値trueを返します。
unparsed-entity-url()

軸はコンテキストノードとの関連性を表し、ツリー上でのノードのコンテキストノードからの相対的な位置を示すのに用いられます。

説明
ancestorコンテキストノードの親ノードからルートノードまでのすべての祖先を示します。
ancestor-or-selfコンテキストノードと、そのすべてのルートノードを含む祖先を示します。
attributeコンテキストノードの属性を示します。
childコンテキストノードの子を示します。
descendantコンテキストノードの子孫を示します。
descendant-or-selfコンテキストノードとそのすべての子孫を示します。
followingコンテキストノードの後に現れる、descendantattributenamespaceノードを除くすべてのノードを示します。
following-siblingコンテキストノードと同じ親を持ち、ソース文書内でコンテキストノードの後に現れるすべてのノードを示します。
namespaceコンテキストノードのスコープ内にあるすべてのノードを示します。
parentコンテキストノードの親である単一のノードを示します。
preceding文書内でコンテキストノードの前に現れる、ancestorattributenamespaceノードを除くすべてのノードを示します。
preceding-siblingコンテキストノードと同じ親を持ち、ソース文書内でコンテキストノードの前に現れるすべてのノードを示します。
selfコンテキストノード自身を示します。

ノードテスト

XPathの式の中で特定の種類のノードを選択するために使用されます。

名前テスト
テスト説明
QNameQNameが指定されたQName に等しい(指定された軸上の)任意のノードに一致します。
*指定された軸上のすべてのノードに一致します。
種類テスト
テスト説明
node()指定された軸上の任意のノードに一致します。
text()指定された軸上の任意のテキスト・ノードに一致します。
comment()指定された軸上の任意のコメント・ノードに一致します。
processing-instruction(NCName)
element()指定された軸上の任意の要素ノードに一致します。
element(QName)QNameで指定された修飾名に一致する名前の任意のエレメント・ノード(指定された軸上にある)に一致します。
element(*)指定された軸上の任意の要素ノードに一致します。
attribute()指定された軸上の任意の属性ノードに一致します。
attribute(QName)QNameで指定されている修飾名に一致する名前の任意の属性ノード(指定された軸上にある)に一致します。
attribute(*)指定された軸上の任意の属性ノードに一致します。
document-node()指定された軸上の任意の文書ノードに一致します。
document-node(element(QName))指定された軸上で、エレメント・ノードが1つしかない文書ノードと一致します。
document-node(element(*))エレメント・ノードを持つ、指定された軸上の任意の文書ノードに一致します。

参考文献

  1. 軸 - XPath | MDN
  2. 関数 - XPath | MDN
  3. IBM Documentation