PHPer な XSLT

プログラマの皆さん、XSLT って使いこなしてますか? そうです XML をごにょごにょして HTML やら他の形式に変換するのに便利なアレです。プログラマやってるとデ変換は日常的に発生するタスクで、駆け出しの頃は awk で、最近だともっぱら perl ですが、変換対象が XML だと perl で DOM 操作するのも切ないので、やっぱり「あ、これ XSLT で」ということになる訳です。ところが、この XSLT って... 私見ですが結構学習コスト高くないですか? 日常的に使うならともかく、年に数回程度の利用機会だとなかなか文法やら「XSLT 的作法」がアタマに定着してくれないのです。その度に某@ITさんとかの入門記事を読んで「おーそうだった。こう書くんだっけ。カリカリ」てなことを飽きずに数年繰り返してた私でした。

なぜ XSLT は身に付きづらいのか? これまた私見ですが、入門書であたりまえのように採られている xsl:apply-templates を入れ子に構造化させた書き方が、手続き型プログラミング言語に慣れてしまった身にはどうも直観的でないのでは、と思うのです。実際、@ITさんの「サンプルで覚えるXSLTプログラミング」

http://www.atmarkit.co.jp/fxml/tanpatsu/xslt/xslt01.html

でも、名簿から氏名だけ抜き取ってリストアップするだけのシンプルなミッションなのに、お手本の XSLT は xsl:apply-templates が3段階もネストされてて結構複雑だったりする。自分もこれが XSLT なのだと思って、この「作法」を見習って書いてきた訳ですが、或る日 PHP のページレットみたいな書き方って出来ないのかなぁ、と試しにやってみたらちゃんと書けるじゃないですか。前述の@ITのお題だと、こんな感じです(xsl:stylesheet の間だけ)。

<xsl:template match="/">
	<HTML>
		<BODY>
		<xsl:for-each select="//EMPLOYEE">
			<xsl:value-of select="ENAME"/><BR/>
		</xsl:for-each>
		</BODY>
	</HTML>
</xsl:template>

おお、@ITのお手本に比べるとコードが半分くらいだし、見通しいいじゃん!

もちろん、xsl:template のマッチングをチョー適当にやってるので、データによってはお手本と違った動作をしますが、現場シチュエーション的にはこんなんで充分だったりすることが多いと思うのですよ。こんな書き方をお気楽にしているうちに、複雑なことをしようとする程、構造化された書き方の有用性が自ずと分かってくる、というのも体験しました。という訳で、XSLT 学習の道筋として最初からガチガチに構造化した作法を前面に出すのって、どうかなーと思った次第です。でも、こういう「PHP的書き方」って何かヤバイ問題とかないのかな? dis られ覚悟で XSLT プロの方にご意見伺ってみたいです。