ゆの in XSLT (feat. XPath)

XSLT版はid:mayukiさんが既に作られているのですが、他の言語だと複数の解が出ているところもあるので、自分もXSLTでの別解を作ってみようと試みました。方針は以下。

できたものは以下の通り。

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="#style"?>
<!DOCTYPE ひだまりスケッチ [
  <!ATTLIST xsl:stylesheet id ID #REQUIRED>
]>
<ひだまりスケッチ>
  <xsl:stylesheet version="1.0"
    id="style"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="/*">
      <xsl:if test=" 来週も見てくださいね > X / _ / X  ">
        <xsl:value-of select="name( /* )"/>
        <xsl:text>×</xsl:text>
        <xsl:value-of select="*[last()]"/>
        <xsl:text> </xsl:text>
        <xsl:value-of select="name( *[last()] )"/>
        <xsl:text>!&#xa;</xsl:text>
      </xsl:if>
    </xsl:template>
    <xsl:template match="xsl:stylesheet"></xsl:template>
  </xsl:stylesheet>
  <X>
    <_>
      <X>201</X>
    </_>
  </X>
  <来週も見てくださいね>365</来週も見てくださいね>
</ひだまりスケッチ>

Firefox 2.0, Opera 9.51では直接開いて結果を見ることもできます。サンプルをどうぞ。IEでもXSLTスタイルシートと文書を分離すれば見れるようになるかと思います。

コマンドラインより、libxmlのxsltprocで変換することもできます。

$ xsltproc hidamari.xml
ひだまりスケッチ×365 来週も見てくださいね!

補足と言い訳

自分の知識はXPath 1.0止まりだったので、出力には結局XSLTの力を借りざるを得なかったのですが、もしかするとXPath 2.0、或いはXQueryとかだったらまた違ったアプローチができるのかも、と思ってみたり。

ところでXSLT 2.0版はまだでしょうか。(追記: 発表されました。→ ゆの in XSLT 2.0 - アリゾナではもう働きたくない社長の blog - キッスブログ (Xiss Blog))