-XPathインジェクション

やっとこさ完成。一ヶ月かかった。

<html>
  <body>
    <div class="box">テンプレート上のダミー文字列</div>
  </body>
</html>

テンプレートにはすでに引っ掛けのid属性すらありません(笑。こういうテンプレートがあったとして。。。

<?xml version="1.0"?>
<m:maya xmlns:m="http://www.seasar.org/maya"
        xmlns:c="http://java.sun.com/jstl/core_rt">
  <c:out c:value="こんにちは" m:rendered="true"
        m:xpath="//div[@class='box']"/>
</m:maya>

こういう設定XMLを書くと。。。

こんにちは

と出力されます。設定XML中のm:xpath属性に記述された、"//div[@class='box']"というXPath式文字列でテンプレートのノードがテストされ、合致するものにインジェクションされるのです。この場合はc:outによって「こんにちは」と出力します。XPathはちょっと難しいのでピンとこないかもしれませんが。現在のCVSコミットバージョンで動作するようになってますのでお試しください。これまでm:id="test"という指定で引っ掛けていたところをXPathで書き換えると、m:xpath="@id='test'"となります。が、普通は書かないよね。個人的にはやりすぎな感があって、どうかなと思いますが、できちゃいましたので。
しかし適用の可能性が高まったことは確かです。HTMLのソースを眺めると、箇所を決定できるXPath式はボキャブラリや関数を駆使すれば必ず書けるので、それまで静的だったHTMLにいきなり動的な機能を追加することができます。たとえばJavaDocなどの成果をそのまま配置してテンプレートとして用いることも可能です。ふつうに考えたら、Docletでも作りますか、となるところ、HTMLはいじらないで、(この場合)JavaDocのHTMLソースをじっと眺める作業になるわけですね。うまく伝わるかな?XPathはコメントも式で認識できますし、Mayaも今回の改修でコメントなどをノードとして持つようにしてますので、どんなHTMLでもなにかインジェクションポイントとして使えるモノがあるでしょう。