サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

PHP における XSL 操作に入門してみる

試験勉強です。今回は XSL 操作をやってみます。

前もって php.ini にて extension=php_xsl.dll を有効にしておきます。

XML データを 以下のサイトから拝借します。

XML文書を作成する | XML徹底入門【わかりやすい図解解説】

そして XSL についても同じサイトの以下の記事から XSL のサンプルを写経します。

XSLTスタイルシートプログラミング(宣言) | XML徹底入門【わかりやすい図解解説】

サンプル

$xmlContents = <<<END_OF_XML
<ゲーム所持リスト>
  <ゲーム情報>
    <管理コード>0001</管理コード>
    <ゲームタイトル>DARK SOULS ?</ゲームタイトル>
    <購入日>2013/3/14</購入日>
    <購入価格>4000</購入価格>
  </ゲーム情報>
  <ゲーム情報>
    <管理コード>0002</管理コード>
    <ゲームタイトル>モンスターハンター4G</ゲームタイトル>
    <購入日>2014/10/11</購入日>
    <購入価格>5800</購入価格>
  </ゲーム情報>
  <ゲーム情報>
    <管理コード>0003</管理コード>
    <ゲームタイトル>ドラゴンクエストヒーローズ 闇竜と世界樹の城</ゲームタイトル>
    <購入日>2015/2/26</購入日>
    <購入価格>5800</購入価格>
  </ゲーム情報>
</ゲーム所持リスト>
END_OF_XML;

$xslContents = <<<END_OF_XSL
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" />
  <xsl:template match="/">
    <html>
    <head>
    <title><xsl:text>ゲーム所持リスト</xsl:text></title>
    <h1><xsl:text>ゲーム所持リスト</xsl:text></h1>
    <table>
    <tr>
        <th><xsl:text>ゲームタイトル</xsl:text></th>
        <th><xsl:text>購入日</xsl:text></th>
        <th><xsl:text>購入価格</xsl:text></th>
    </tr>
    <xsl:for-each select="ゲーム所持リスト/ゲーム情報">
    <tr>
        <td><xsl:value-of select="ゲームタイトル" /></td>
        <td><xsl:value-of select="購入日" /></td>
        <td><xsl:value-of select="購入価格" /></td>
    </tr>
    </xsl:for-each>
    </table>
    </head>
    </html>
  </xsl:template>
</xsl:stylesheet>
END_OF_XSL;

$xslDoc = new DOMDocument();
$xslDoc->loadXML($xslContents);

$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($xmlContents);

$xslt = new XSLTProcessor();
$xslt->importStyleSheet($xslDoc);
// ブラウザに表示する
echo $xslt->transformToXML($xmlDoc);
// HTML ファイルに書き込み、書き込んだバイト数をブラウザに表示する
//echo $xslt->transformToURI($xmlDoc, 'file:///temp/out.html');

なるほど。