読者です 読者をやめる 読者になる 読者になる

まめ畑

ゆるゆると書いていきます

Query2XMLを使ってみた

PHP Query2XML

XMLを使ってアプリを作る機会があったのと、今後増えそうなのでPHPMySQLのデータ取ってきてXMLで表示させる物を簡単に作ってみた。
普通にSQL発行してレスポンスをXMLに整形すればおkなんだけど、本当に小さなサブ的要素にそこまで時間かけるのもなんだしという事で、今回はQuery2XMLを使ってみたよ!

Query2XMLってなんぞ?

名前の通りにDBへのリクエストをXML形式で返してくれるもの。
クエリ投げて、結果はXMLで返ってくるから、それを表示するだけでいい。
PHP5.0以上がいります。

導入方法

#pear install XML_Query2XML
だけ。
いくつか依存関係を問われるので同時に入れます。
MDB2の様な抽象化レイヤーとDBのドライバですね。
今回は、MDB2MySQLのドライバを使用しています。

基本の使い方

<?php
require_once 'XML/Query2XML.php';
require_once 'MDB2.php';

try{
	//SQLを発行して結果を取得し、XMLに整形
	$res = XML_Query2XML::factory(MDB2::factory('mysql://ID:PASS@localhost/DBName'));
	$sql = "SELECT * FROM hoge";
	$xml = $res->getFlatXML($sql);
	
	//出力用ヘッダ
	header('Content-Type: text/xml');
	
	//出力
	$xml->formatOutput = true;
	echo $xml->saveXML();
	
} catch(Exception $e){
         echo $e->getMessage();
}
?>

これだけ。
この表示はこんな感じ。

  <?xml version="1.0" encoding="UTF-8" ?> 
  <root>
    <row>
      <id>1</id> 
      <col1>hoge</col1> 
      <col2>hogege</col2> 
    </row>
    <row>
      <id>2</id> 
      <col1>hogetter</col1> 
      <col2>fugatter</col2> 
    </row>
    <row>
      <id>3</id> 
      <col1>hogehoge</col1> 
      <col2>fugafuga</col2> 
   </row>
  </root>

簡単!!!

応用例

こいつはかなり複雑な要求もこなしてくれます。
こいつとXSLを使えば出力も整形出来るし。

あとは、XMLのタグをいじれます。

<?php
$xml = $res->getXML($sql, array(
            'idColumn' => 'IDが変わる',
            'rootTag' => 'rootが変わる',
            'rowTag' => '結果列が変わる',
            'attributes' => array('属性が変わる')
            'elements' => array('要素が変わる')
        )    
    );
?>

こんな感じでOPTIONを指定すればOKです。
ここで注意が必要なのは、elementsで指定した物だけが表示されます。
attributeとeleentsはarray()で指定します。


'elements' => array('hoge','fuga','hogege'=>'fugaga')
こんな感じです。
最後のものは、hogege列をfugagaと名前を変えて表示させます。

便利だね

http://query2xml.sourceforge.net/docs/html/XML_Query2XML/tutorial_XML_Query2XML.pkg.htmlでリファレンスが見れるので、もっと便利な機能を体験してみて下さい。
サンプルも豊富でわかりやすかったです。

もっと使いこなせるようにならないと。

追記

実はMySQLも結果でXMLを表示出来るんです。
でも、外部プログラムから使う方法はわからんです。。。
mysql -u User -p Pass -X
これで後は、普通にDB選択して、クエリ投げればおk。
結果が表形式ではなく、XML形式で返ってきます。


XMLって便利。