PHPでXMLを生成し、XSLTに変数を渡して、1枚のXMLファイルで複数の情報の見せ方をする

Vosegus Labs

デモ (インデックスは通常のPHPです)

基本設計

PHPでXMLを生成し、XSLTに変数を渡して、1枚のXMLファイルで複数の情報の見せ方をする。というのをやってみたいと思います。

基本設計は以下のとおりです。

  1. XMLは管理画面から生成します。
  2. 実際に生成されるファイルはPHPです。それのheader情報を書き換え、MIME TypeをXMLに変更します。
  3. XML(PHP)は一枚のみ生成し、それをリソースとしてすべてのコンテンツを生成します。
  4. コンテンツの生成にはXSLTを使用します。XSLTには変数をセットし、変数の値によってXMLのトレースを操作します。
  5. 変数にはGETの値をセットします。XSLTのパスも同じように切り替えます。
  6. 最終的にXML(PHP)はXSLTによって変換され、htmlとしてブラウザに表示されます。

すべて一枚のファイルから生成されるので、実際には空間的階層構造というのは存在しませんが、概念的には以下のようになります。

ホームをルートとし、その下にカテゴリインデックス、さらにその下に各カテゴリのページ

利点としてはすべてのリソースの一元管理です。データベースでやれば? みたいなはなしは無視します。XMLでやりたいからです。

SEOに不利になるおそれもありますが、コンテンツが増えれば、ルートとなるXMLファイルをトレースし、各ページ毎にXMLを生成すればよいかと。

XMLはインデックスされるので。

XMLの設計

XMLの設計は以下の様になります

<global> <variable-xsl></variable-xsl> <category-num-array></category-num-array> <variable-node-array></variable-node-array> <keywords> <keyword></keyword> <keyword></keyword> <keyword></keyword> </keywords> <category id=“”> <title<家具</title> <unit> <product-name></product-name> <size></size> <maker></maker> <name></name> <read></read> <description></description> <price></price> <rating></rating> <images> <image></image> <image></image> <image></image> </images> <amazon-link> <![CDATA[]]> </amazon-link> </unit> </category> </global>

variable-xslはxslのパスを指定する変数です。category-num-arrayはカテゴリを指定する変数です。variable-node-arrayはアクセスするノードの配列を指定する変数です。

変数の設計

変数はGETで受け取ったものを、PHPで書き出し、

url?xslpath=Path&category=num&array=num

といった形になります。

XSLTの設計

PHPで書き出したXMLのノードバリューを受け取ってxsl:variableへセットします。

セットしたxsl:variableをXPathとXSLTのパスへセットします。

デモ (インデックスは通常のPHPです)

XML辞典 (DESKTOP REFERENCE)

XML辞典

実践的なテクニックが詰まった、豊富なサンプル群を機能別に分類、網羅したリファレンスです。即効性の高いテクニックと知識がすぐに引けます。もちろんサンプルはダウンロードで入手可能です。XSLT、DTD、DOM、XPathのリファレンスなど掲載されています。