Kanasan.JS JavaScript第5版読書会に参加した

2010/06/05(土) に開かれた Kanasan.JS JavaScript第5版読書会#10 に参加した。

読んだところ

今回の範囲は P529 から P559。 XML の操作に関するところを読んだ。

JavaScript から新しい XML ドキュメントを作る方法とか、データアイランドとか、XSLT とか書いてあった。はっきり言ってあんまり使わないので、そんなものもあるのか、ぐらいに思っておけばいいんじゃないのかな。

XPath

そして今回の目玉、nanto_vi さんによる XPath 解説。すごく楽しみにしてたので、期待が高まる。

で、発表してもらったんだけど、XPath を体系的に解説してもらった。こんなにまとまった話聞いたのは初めてで、めちゃ勉強になった。

そのときのお話と、あとから自分で調べたことのまとめ。

2010/09/29 追記

その時の発表資料が公開されました。
Excellent XPath Expressions

用語の定義

用語が把握できてないと、資料とか読んでてもわけ分かんなくなる。きっちりおさえておこう。

ロケーションパス
一つ以上のロケーションステップを / 区切りで並べたもの。ロケーションステップで選択された集合の各ノードが次のロケーションステップのコンテクストとして使用される。
ロケーションステップ
コンテキストノードに対してノードの集合を選択する指定方法。軸、ノードテスト、述語の3つから構成される。
ノードを選択する方向の指定
ノードテスト
選択するノードの指定
述語
ノードテストで選んだノードをさらに絞り込む指定。
ロケーションステップの書き方

ロケーションステップの書き方が超重要。ロケーションステップの書き方は以下。

軸::ノードテスト[述語1][述語2] ...
述語は何個でも並べて良いし、一つも書かなくても良い。

これさえ分かれば、あとは / 区切りでつないでいくだけ。

ロケーションステップの書き方の例

適当に(省略構文でない)例を書いておく。

  • descendant-or-self::div[1]

コンテクスト自身、またはその子孫ノードの名前が div であるもののうち1つめ。要するに、最初に出てきた div を選ぶ。

  • descendant-or-self::a[@href = 'xxx']

コンテクスト自身、またはその子孫ノードの a のうち、href 属性として xxx を持つもの全部。要するにリンク先が xxx となっている a 全部。

  • descendant-or-self::h1[string(self::node()) = 'xxx']

コンテクスト自身、またはその子孫ノードの h1 のうち、含まれるテキストノードをすべて結合すると xxx となるもの全部。要するに、xxx と書いてある h1 全部。ただし、h1 の中に含まれるタグは全部無視する。

あると便利なもの

XPath を試すのに便利なもの。

Xpath 式を受けとって、選択されたノードを配列として返す。一番お手軽。

Xpath 式を評価した結果を選択できる Firebug 用の拡張機能

参考資料

AutoPagerize の wedata に XPath の例がいっぱい書いてあるので参考になる。

XPath は今までなんとなくコピペですませてたんだけど、これからは自分で書けるようになる。めちゃ勉強になったし、参加して良かった。

というわけで、 nanto_vi さん、ありがとう。