メモ書き

自分が後で見直すためにつけている作業のメモ書きです.それ以上の意味はありません

XPath

それはなにか

ロケーションパスの構造

  • 全体は / で区切られたいくつかの要素からなる
  • 先頭が / で始まっていれば絶対パス.そうでない場合は相対パス
  • / で区切られた部分の構造
  • 軸方向
    • child
      • コンテクストノードの子ノード
      • 軸を省略した時は child 扱い
    • descendant
      • コンテクストノードの子孫ノード
    • parent
      • コンテクストノードの親ノード
      • .. で代替可能
    • ancestor
      • コンテクストノードの祖先ノード
    • following-sibling
      • コンテクストノードの兄弟ノードのうち後方のノード
    • preceding-sibling
      • コンテクストノードの兄弟ノードのうち前方のノード
    • following
      • XML文書の文書順でコンテクストノードより後方にある全てのノード
    • preceding
      • XML文書の文書順でコンテクストノードより前方にある全てのノード
    • attribute
      • コンテクストノードが要素の場合、その属性ノード
      • @ で代替可能
    • namespace
      • コンテクストノードが要素の場合、その名前空間ノード
    • self
      • コンテクストノード自身
      • . で代替可能
    • descendant-or-self
      • コンテクストノード自身とコンテクストノードの子孫ノード
      • // で代替可能
      • カレントから下方向に向けた再帰的な探索で使用
    • ancestor-or-self
      • コンテクストノード自身とコンテクストノードの祖先ノード
  • ノードテスト:条件でフィルタするためのもの
    • ノードの名前
      • 指定したノードそのもの
    • node()
      • 軸に含まれる全ノード
    • text()
      • 軸に含まれるテキストノード
    • comment()
      • 軸に含まれるコメントノード
    • processing-instruction()
      • 軸に含まれるPIノード
    • processing-instruction(A)
      • 軸に含まれるPIノードで、ターゲット名がAであるもの

/A/B/C
  • /child::A/child::B/child::C
  • ルート要素Aの子要素Bの子要素Cを示す絶対パス
A//B/*[1]
  • child::A/descendant-or-self::node()/child::B/child::*[1]
  • 子要素Aのそれ自身または子孫ノードとなる全要素の子要素Bの子要素のうち任意の名前の最初の要素を示す相対パス
//a[@href='help.php'][name(..)='div'][../@class='header']/@target
  • a 要素の target 属性の値
  • ただし、このXPath式の最初のロケーションステップには3つの述語が記述されている
  • a 要素のうち
    • a 要素の href 属性の値が 'help.php' であり、
    • また、a 要素の親要素の要素名が div であり、
    • また、親要素 (div) の class 属性の値が 'header'