XPath は、XML ドキュメントの一部をアドレッシングするための言語であり、XSLT および XPointer で使用するように設計されている。
XPathは、マーク付け言語において要素を特定する手段の一つである。アドレス形式で記述し、基本的な記法は軸方向::名前空間:ノードテスト[述語]/〜〜となる。これをロケーションパスと言い、"/"で区切られた一つの記述をロケーションステップと呼ぶ。
ロケーションパスは、"/"で始まるものを絶対パス、始まらないものを相対パスとして展開する。絶対パスではルートノード(後述)がコンテキストノードとなり、相対パスでは基準ノードがコンテキストノードになる。ルートノードとルート要素は異なる点に注意。
XPathでは、マーク付け文書をノードという単位に分解し、木構造を展開する。ノードには「ルートノード」「要素ノード」「属性ノード」「テキストノード」「プロセッシングインストラクションノード」「コメントノード」「ネームスペースノード」の7種類がある。
軸方向とはコンテキストノードから対象となるノードへの樹関係を示すものである。頻繁に用いられる軸方向には略記法が定義されている。
parent::node()"は".."と省略出来る。self::node()"は"."と省略出来る。child"が自動的に補完される。/descendant-or-self::node()/"は"//"と省略出来る。attribute::"は"@"と省略出来る。ノードテストとは軸方向から該当するノードを指定するものである。接頭語を用いて名前空間を指定することも出来る。
注意しなければならないのは名前空間の指定を省略した場合、xmlnsで指定されたデフォルト名前空間は適応されずnull(名前空間が存在しない)扱いになる点である。ノード名の他、以下の記法が存在する。
attribute::であれば属性、namespace::であれば名前空間、それ以外では要素ノード)述語とは、ノードテストで選出されたノード集合を、さらに振り分けする条件を記述する部分である。評価には式を用い、式の値が真のノードのみが選出される。
式とは述語中に記述されるノードの条件を規定するものである。
para[child::bora]はbora要素を子供にもつpara要素に対して真となる。para[child::bora/child::text() = "いろは"]は「いろは」というテキストノードをもつbora要素を子供にもつpara要素に対して真となる。<を使うなどをしてエスケープしなければならない。関数とは、ノードテストや述語中に記述することでその引数をロケーションステップや式の評価に用いるものである。
substring-before('1999/04/01','/') は「1999」を返す。substring-after('1999/04/01','/') は「04/01」を返す。substring('12345',2,3) は「234」を返す。最初の文字は1から始まる点に注意。translate('bar','abc','ABC') は「BAr」を返す。もし△△が省略、もしくは××に対応する長さが無い場合は対応する文字を削除して返す。例えばtranslate('--aaa--','abc-','ABC')は「AAA」を返す。