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でみると下のようになってれば使える。

image

実際に使うときには名前空間を宣言するのを忘れずに。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common">

名古屋のおもしろ会社エクスブリッジ