PHPでXMLを簡単に出力する方法

今度はPHPXMLを簡単に出力する方法の紹介です。
Flexとの連携で威力を発揮するでしょう。
昨日の日記と同じようにpearXML_Serializerのインストールです。

# pear install http://download.pear.php.net/package/XML_Serializer-0.18.0.tgz

PHPでデータベースの内容をXML_Serializerを使って効率よく出力する方法。

<?php
require_once 'XML/Serializer.php';
$options = array(
                 "indent"         => " ",
                 "linebreak"      => "\n",
                 "typeHints"      => false,
                 "addDecl"        => true,
                 "encoding"       => "UTF-8",
                 "rootName"       => "result",
                 "defaultTagName" => "item",
                 );
$serializer = new XML_Serializer($options);
$sql = "SELECT * FROM book_data ORDER BY id ;";
$result = mysql_query( $sql );
$valArr = array();
while( $val = mysql_fetch_assoc( $result ) ){
    $valArr[] = $val;
 }
$status = $serializer->serialize($valArr);
if( $status === true ) {
    $xml = $serializer->getSerializedData();
    header ("Content-Type: text/xml; charset=UTF-8");
    echo $xml;
    exit;
}
exit;
?>

ミソはデータベースの内容を配列(連想配列)で受け取る部分です。

<?php
$valArr = array();
while( $val = mysql_fetch_assoc( $result ) ){
    $valArr[] = $val;
}
?>

PHPの出力サンプル

<?xml version="1.0" encoding="UTF-8"?>
<result>
 <item>
  <id>2</id>
  <isbn>4873113652</isbn>
  <title>初めてのPHP &amp; MySQL 第2版</title>
  <image>http://ecx.images-amazon.com/images/I/51X-I4MADBL.jpg</image>
  <print>1</print>
 </item>
      〜 省略 〜
 <item>
  <id>9</id>
  <isbn>4861342627</isbn>
  <title>花がふってくる (DARIA BUNKO)</title>
  <image>http://ecx.images-amazon.com/images/I/41%2BNXDh-88L.jpg</image>
  <print>1</print>
 </item>
 <item />
</result>

個人的に便利だなぁって思うのが、上記のプログラムだとxmlのタグを自動で変更してくれる点。
MySQLで以下のように書くとxmlのタグも自動で変わります。
通常のsql

SELECT id FROM book_data;

通常のxml出力例

 <item>
  <id>9</id>
 </item>

ちょびっと自分用に名前を変更

SELECT id as itemid FROM book_data;

自分用のxml出力例

 <item>
  <itemid>9</itemid>
 </item>

xmlのタグの書き換えって意外にめんどいので便利です。
簡単でかつ柔軟性のあるプログラムっていいね\(゜ロ\)(/ロ゜)/