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>!
</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 来週も見てくださいね!
X / _ / X
はスラッシュで区切られているから勿論ロケーションパスだ! とか思いつくも、空白文字を間に入れるのは仕様的には果たしてどうなのだろう。しかし複数の実装で動いたのでひとまずよしとします。自分の知識はXPath 1.0止まりだったので、出力には結局XSLTの力を借りざるを得なかったのですが、もしかするとXPath 2.0、或いはXQueryとかだったらまた違ったアプローチができるのかも、と思ってみたり。
ところでXSLT 2.0版はまだでしょうか。(追記: 発表されました。→ ゆの in XSLT 2.0 - アリゾナではもう働きたくない社長の blog - キッスブログ (Xiss Blog))