XPath Cheat Sheet


     

    省略形

    完全な構文

    全要素

    //*

    /descendant::*

    全 div 要素

    //div

    /descendant::div

    class 属性が "hoge" である div 要素

    //div[@class="hoge"]

    /descendant::div[@class="hoge"]

    id 属性が "hoge" である要素

    id("hoge")

    //*[@id="hoge"]

    Title属性が "hoge"でclass 属性が "fuga" でない要素

    //*[@title="hoge" and @class!="fuga"]

    /descendant::*[@title="hoge" and @class!="fuga"]

    Form 要素の 3 番目の input 要素

    //form/descendant::input[3]

    /descendant::form/descendant::input[3]

    チェックされたチェックボックスの親要素

    //input[@checked="checked"]/..

    //input[@checked="checked"]/parent::node()

    a 要素のhref属性

    //a/@href

    /descendant::a/ attribute:href

    ルートのA要素中のB要素中のC要素全て

    /A/B/C

    /child::A/child::B/child::C

    A要素の子孫のB要素の1番目の子要素

    A//B/*[1]

    child::A/descendant-or-self::node()/child::B/child::*[1]

    href属性が’help.php’、親要素がdiv要素でかつ親要素class属性が’header’ なa要素のtarget属性

    //a[@href='help.php'][name(..)='div'][../@class='header']/@target

     

    price 属性の数が discount属性の2倍以上なitem要素

    //item[@price >= 2*@discount]

     

    子要素にxかyを持つvとzを持つwの和集合

    v[x or y] | w[z]

     

    5番目のPage要素

    Page[position( ) = 5]

     



    (全てコンテキストノード基準)

    完全な構文

    省略形

    子ノード

    child

    (何も書かない)

    子孫ノード

    Descendant

     

    親ノード

    Parent

    ..

    祖先ノード

    Ancestor

     

    兄弟ノードのうち前方のノード

    preceding-sibling

     

    兄弟ノードのうち後方のノード

    following-sibling

     

    前方にある全てのノード

    preceding

     

    後方にある全てのノード

    following

     

    要素の場合は属性ノード

    attribute

    @

    要素の場合は名前空間ノード

    namespace

     

    (コンテキストノード)自身

    Self

    .

    自身とその子孫ノード

    descendant-or-self

    //

    自身とその祖先ノード

    ancestor-or-self

     



    ノードテスト

     

    名前 その名前の全ての要素、属性、名前空間ノード
    text( ) ノード中の文字列。例: <k>こんにちは</k> の中の 'こんにちは'
    comment( ) 全てのXMLコメントノードを指定する。例: <!-- コメント -->
    processing-instruction( ) 全てのXML処理命令ノードを指定する。<?xsl-stylesheet href="article.css" ?> を指定するには processing-instruction('xsl-stylesheet') と記述すればよい
    node( ) 全てのノードを指定する
    * 主ノード型の全てのノードを指定する。要するに、要素、属性、名前空間ノード


    関数

    説明

    ノード集合関数

    Position( )

    number

    評価中のノードが兄弟ノードの何番目か返す

    count(node-set)

    引数のノード集合 (もしくはノード集合を返す式) のノードの数を返す

    id(object)

    node-set

    引数のオブジェクトの文字列値をID型の属性値として持つノードの集合を返す

    name(node-set)

    string

    引数として渡されたノード集合の最初のノードの名前を返す (ノードが要素の場合は要素名、属性の場合は属性名)

    文字列関数

    string(object)

    string

    仕様で定められた変換規則により文字列に変換する。引数としてXPath式も渡すことができる

    substring(string,number, number)

    引数として渡す文字列の部分文字列を返す

    concat(string, string, string*)

    引数として渡す複数の文字列を連結して返す

    normalize-space(string)

    引数の文字列を正規化(文字列の前後の空白文字と文字列中に連続して現れる空白文字を一つの空白で置き換え)し、返す

    string-length(string)

    number

    引数として渡す文字列の長さ (文字の数) を返す

    contains(string1, string2)

    boolean

    文字列 string1 に文字列 string2 が含まれていた場合、trueを返す

    論理関数

    not(boolean)

    boolean

    引数の論理値の逆の値を返す

    数値関数

    sum(node-set)

    number

    引数として渡されたノード集合の各ノードの文字列値を、仕様で定められた変換規則にしたがって数値に変換し、合計した値を返す



    ノード集合関数

     

    number last()

    コンテキストサイズを返す

    number position()

    コンテキスト位置を返す

    number count(node-set)

    引数に指定したノード集合に含まれるノード数を返す

    node-set id(object)

    ID によりエレメントを選択する

    string local-name(node-set)

    local-name 関数は引数に指定したノード集合内のノードのうち、ドキュメント順で展開された名前の最初のノードのローカルパートを返す。引数を省略した場合は、コンテキストノードを唯一のメンバに持つノード集合をデフォルトとして使用する

    string namespace-uri(node-set)

    namespace-uri 関数は引数に指定したノード集合内のノードのうち、ドキュメント順で最初のノードの展開された名前のネームスペース URI を返す。引数を省略した場合は、コンテキストノードを唯一のメンバに持つノード集合をデフォルトとして使用する。返す文字列は、エレメントノードとアトリビュートノード以外は空になる

    string name(node-set)

    name 関数は引数に指定したノード集合内のノードのうち、ドキュメント順で最初のノードの展開された名前を表現する QName を持つ文字列を返す。 引数を省略した場合は、コンテキストノードを唯一のメンバに持つノード集合をデフォルトとして使用する。エレメントノードとアトリビュートノードを除き、name 関数が返す文字列は local-name 関数が返す文字列と同じである



    文字列関数

     

    string string(object)

    オブジェクトを文字列に変換する

    string concat(string, string, string*)

    引数を連結して返す

    boolean starts-with(string, string)

    1番目の文字列が2番目の文字列で始まっている場合に真を返し、それ以外は偽を返す

    boolean contains(string, string)

    1番目の文字列が2番目の文字列を含んでいる場合に真を返し、それ以外は偽を返す

    string substring-before(string, string)

    2番目の文字列が1番目の文字列内で最初に見つかった場合に、その文字列よりも前にある文字列 を返す

    string substring-after(string, string)

    2番目の文字列が1番目の文字列内で最初に見つかった場合に、その文字列よりも後にある文字列 を返す

    string substring(string, number, number)

    1番目の文字列のうち、2番目に指定した位置から始まる文字列を、3番目で指定した長さだけ返す。 3番目を指定しないと、2番目に指定した位置から最後までの文字列 を返す

    number string-length(string)

    文字列内の文字数を返す。 引数を省略した場合は、コンテキストノードの文字列値をデフォルトとして使用する

    string normalize-space(string)

    引数に指定した文字列の空白文字を正規化して返す。つまり前後の空白文字を取り除き、連続する空白文字を1つの空白文字に置き換える。 引数を省略した場合は、コンテキストノードの文字列値をデフォルトとして使用する

    string translate(string, string, string)

    1番目の引数に指定した文字列内に2番目の引数に指定した文字列内の文字があった場合、その文字を3番目の引数に指定した文字列内の対応する位置の文字で置き換えて返す。 たとえば translate("bar","abc","ABC") は BAr を返す。 2番目の引数に指定した文字列が3番目の引数に指定した文字列よりも長いために、2番目の引数に指定した文字列内の文字に対応する文字が3番目の引数に指定した文字列内に存在しない場合は、1番目の引数に指定した文字列内の対応する文字を削除する。 たとえば translate("--aaa--","abc-","ABC") は "AAA" を返す。 2番目の文字列内に同じ文字が複数ある場合には、最初の文字を使用して置き換えが行われる



    ブール関数

     

    boolean boolean(object)

    引数をブール値に変換する

    boolean not(boolean)

    引数が偽の場合に真を、それ以外は偽を返す

    boolean true()

    真を返す

    boolean false()

    偽を返す

    boolean lang(string)

    lang 関数は、コンテキストノードの xml:lang という名前のアトリビュートで指定したコンテキストノードの言語が引数に指定したものと同じ言語であるか、または引数に指定した言語のサブ言語であるかにより、真または偽を返す。 コンテキストノードの言語は、コンテキストノードの xml:lang という名前のアトリビュートの値で決まる。あるいは、コンテキストノードが xml:lang という名前のアトリビュートを持たない場合は、コンテキストノードに最も近い祖先エレメントが持つ xml:lang という名前のアトリビュートの値で決まる。 そのようなアトリビュートがない場合は、lang 関数は偽を返す。 そのようなアトリビュートがある場合、lang 関数は大文字と小文字を区別せずに比較して、アトリビュート値と引数が等しい場合は真を返す。またアトリビュート値が - で始まるサフィックスを持つ場合は、そのサフィックスは考慮せず、そして大文字と小文字を区別することなく比較して、アトリビュート値が引数に等しい場合にも真を返す。 たとえばコンテキストノードが以下の5つのエレメントのいずれかの場合に、lang("en") は真を返す
    <para xml:lang="en"/>
    <div xml:lang="en"><para/></div>
    <para xml:lang="EN"/>
    <para xml:lang="en-us"/>



    数値関数

     

    number number(object)

    引数を数値に変換する

    number sum(node-set)

    各ノードの文字列値を数値に変換し、合計した値を返す

    number floor(number)

    引数に指定した数値よりも大きくない範囲で、最も大きい整数を返す

    number ceiling(number)

    引数に指定した数値よりも小さくない範囲で、最も小さい整数を返す

    number round(number)

    引数に指定した値に最も近い整数を返す。



    For Javascript
    var result = document.evaluate(
                   '//div',       // ここにXpath
                   document,      // 評価対象。document.bodyとすると head 以下の要素は取得されない
                   null,          // HTML 文書の場合や、名前空間接頭辞が使われていない場合は null 
                   7,             // 結果の種類を指定する。別表参照。よく分からないなら7
                   null           // XPathResultオブジェクトを再利用するならそれを、しないならnull
                 );
    result.snapshotLength;  // 取得した要素(正確にはノード)の数。
    result.snapshotItem(0); // 1 個目の要素
    result.snapshotItem(1); // 2 個目の要素

    定義済みの結果型定数

    戻り値関係

    解説

    ANY_TYPE

    0

    resultTypeから型
    (この表の値)が取得可

    式の評価によって導き出される適切な型を格納した結果の集合。結果がノード集合ならば、結果の型は常にUNORDERED_NODE_ITERATOR_TYPE となるので注意が必要

    NUMBER_TYPE

    1

    numberValue

    一つの数値を格納した結果。 count() 関数を使用した XPath 式などで有用

    STRING_TYPE

    2

    stringValue

    一つの文字列を格納した結果

    BOOLEAN_TYPE

    3

    booleanValue

    一つの真偽値を格納した結果。 not() 関数を使用した XPath 式などで有用

    UNORDERED_NODE_ITERATOR_
    TYPE

    4

    iterateNext()
    イテレータとして使える。
    反復終了後はnullを返す

    式にマッチした全てのノードを格納した結果ノード集合
    ノードの順番は文書内に現れる順番と必ずしも一致しない

    ORDERED_NODE_ITERATOR_TYPE

    5

    同上。ノードの順番は文書内に現れる順番に一致する

    UNORDERED_NODE_SNAPSHOT_
    TYPE

    6

    snapshotItem(番号)
    snapshotLength
    文書が変異しても変更されない。

    式にマッチした全てのノードのスナップショットを格納した結果ノード集合
    ノードの順番は文書内に現れる順番と必ずしも一致しない

    ORDERED_NODE_SNAPSHOT_TYPE

    7

    同上。ノードの順番は文書内に現れる順番に一致する

    ANY_UNORDERED_NODE_TYPE

    8

    singleNodeValue

    式にマッチしたノードのうちのどれか一つを格納した結果ノード集合
    これは必ずしも文書内で式にマッチした最初のノードというわけではない

    FIRST_ORDERED_NODE_TYPE

    9

    singleNodeValue

    文書内で式にマッチした最初のノードを格納した結果ノード集合



    参考資料
    http://www.infoteria.com/jp/contents/xml-data/REC-xpath-19991116-jpn.htm
    http://developer.mozilla.org/ja/docs/Introduction_to_using_XPath_in_JavaScript
    http://ja.wikipedia.org/wiki/XML_Path_Language
    http://svn.coderepos.org/share/lang/javascript/javascript-xpath/trunk/test/functional/index.html
    http://coderepos.org/share/wiki/JavaScript-XPath