E4XもどきでXPath式文字列を得る

方針

HTMLで使えればいい。XMLで汎用的に使うのはあきらめる(自分も必要としていない)。
単純なXPathを簡単に書ければいい。複雑なXPathを書くのをあきらめる。


E4Xだと

div..a.img.( @src.indexOf("gif") >= 0 )

と書ける。

( ) の部分はXML 選別述語演算子で、これはインタプリタのサポートが必要なのであきらめる。

.. は ._. にする。
プロパティは@が使えないのでかわりに$にする。

div..a.img.$src.contains()

こう書き換わる。id(), contains(), position(), last()くらいが使えれば(とりあえず自分の目的の)実用上問題ないので、なんかE4Xと離れちゃうけど利便性優先。XPath式の文字列が楽に書ければいい。

$srcが問題。関数呼び出しじゃないので__noSuchMethod__でハンドルできない。なんで関数呼び出しだけあるんだろう。HTML前提なのでHTMLで使われるプロパティを全部定義してgetterで値を返すようにすれば一応いける。

やっぱりでも a[last() - 1 ] とかは書きたいことがあると思う。そこはサポートの外、でも汚いやり方はある、くらいでいいことにする。

div..a.last().replacePredicate(/$/, " - 1")

これでpredicateの最後に追加。アタマに 1 + をいれたければ

div..a.last().replacePredicate(/^/, "1 + ")

とりあえずこの仕様でいいや。