PHP5でXML + XSLTを使う
仕事でXML + XSLT => HTMLのシステムを作っていたので、PHPでもXSLTを使えないかなぁと思ったりしてます。ただPHPが詳しくなった今、XML + XSLTで幸せになれる場面がそんなに思い浮かばないので、まぁいつか役に立つ技術ぐらいかなぁというイメージです。
PHP4ではXSLTはSablotronだったようですが、PHP5ではlibxsltになりました。詳細はここのPHP4とPHP5のXMLサポートの違いを参照。
以下PHP4でXSLT変換していたのをPHP5に移行したときのメモ。
さくっと動くかと思いきやxsl:for-each文でほとんどエラーとなるので調べてみたら、ほかの人達はexsl:node-setという関数を使っているみたい。sablotronやmsxmlだとテンプレートに引数として渡すと自動で判断してくれたのに・・・
Windowsサーバでmsxmlを使っていた人は予想ができると思うけど、exsl:node-setは引数をノードセットとして評価してくれるらしい。
exsl:node-setを使うにはEXSLTというコンポーネントがインストールされている必要があるみたい。ここ
phpinfoでみると下のようになってれば使える。
実際に使うときには名前空間を宣言するのを忘れずに。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common">