Vosegus Sakura

  1. Home
  2. Vosegus Labs
  3. XSLT にパラメータを渡して XML をソートする

XSLT にパラメータを渡して XML をソートする

Vosegus Labs

デモ

覚え書き(個人的解釈の範疇です)
xsl:sort に渡されるselectの値は、xsl:for-eachの文脈によって処理されるために、単純にxsl:variableで文字列として書き出しても認識しない(ソートされない)。
つまり
<xsl:variable name="p" select="var">
<xsl:sort select="'$p'" order="descending" lang="ja" data-type="number"/>
では無視される(xsl:variableはxsl:for-eachの文脈には入ってないから)。
そこでちょっと無理やり、XSLTもPHPでヘッダーを書き換え、PHPでselectに入ってくる値を書き換えた。
なのでGETの値を受け取ったXML化されたPHPが、さらにXSLT化されたPHPに変数を渡すという処理になる。

基本設計

GETリクエストのパラメータをPHPで受け取り、その値に応じてソートする対象を変更する。

XMLの設計

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

<!DOCTYPE products [ <!ELEMENT products (unit+)> <!ELEMENT unit ( products-name, id, price )> <!ELEMENT products-name (#PCDATA)> <!ELEMENT id (#PCDATA)> <!ELEMENT price (#PCDATA)> ]>

XMLとXSLTに渡す変数の設計

XML

if(isset($_GET['price'])){ $param = "price"; }

<?xml-stylesheet type="text/xsl" href="sort.php?'.$param.'" ?>'

XSLT

if(isset($_GET['price'])){ $target = "price"; }

<xsl:sort select="'.$target.'" order="descending" lang="ja" data-type="number"/>'

このページの上部へ