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 - MDC
- XML Path Language - Wikipedia
- XPath使いのための日本語チートシート
- REC-xpath-19991116-jpn.htm
- アイテム - データベース: AutoPagerize - wedata
AutoPagerize の wedata に XPath の例がいっぱい書いてあるので参考になる。
XPath は今までなんとなくコピペですませてたんだけど、これからは自分で書けるようになる。めちゃ勉強になったし、参加して良かった。
というわけで、 nanto_vi さん、ありがとう。