PHPマニュアル より。。。注意: この拡張は実験的なものではありません。しかしながら、PHP 5 では決してリリースされないでしょう。また、PHP 4 でのみ配布されます。 もし PHP 5 でDOM XML をサポートする必要がある場合、 DOM 拡張を使用することができます。 この domxml 拡張は DOM 拡張と互換性はありません。
PHPのDOM XML関数を使った例として、OracleSELECTしたデータをそのままXML形式で出力するサンプルを作ってみました。イメージは、Oracle8.1.7iから標準で付属しているツール「Oracle XDK」で、カラム名がそのまま要素名(タグ名)にしています。
PHPスクリプト
<?php
/**
* Oracle関連の前処理
*/
$conn = OCILogon("scott", "tiger", "orcl");
$sql = "SELECT * FROM emp";
$stmt = OCIParse($conn, $sql);
OCIExecute($stmt);
$col = OCINumCols($stmt);
/**
* 出力されるXMLはUTF-8であることに注意!
*/
if(!$doc = domxml_new_xmldoc("1.0")) {
echo "Error while parsing the document\n";
exit;
}
/**
* XMLデータの作成開始
*/
$root = $doc->add_root("data");
$cnt = 0;
while (OCIFetch($stmt)) {
$rows = $root->new_child("rows", "");
// 属性として行番号
$rows->set_attribute("num", ++$cnt);
for ($i = 1; $i <= $col; $i++) {
/**
* Fetchしたデータの文字コードをUTF-8に変換
* ちなみに、今回の環境の文字コードは、
* ?DB:JA16SJIS、
* ?php.ini:mbstring.internal_encoding = EUC-JP
* ?ソースコード:EUC
* です。
*/
$col_name = mb_convert_encoding(OCIColumnName($stmt, $i), "UTF-8", "EUC");
$rows->new_child($col_name, mb_convert_encoding(OCIResult($stmt, $col_name), "UTF-8", "EUC"));
}
}
OCIFreeStatement($stmt);
OCILogOff($conn);
// XMLツリーの出力
echo $doc->dumpmem();
?>
●出力結果
<?xml version="1.0"?>
<data>
<rows num="1">
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>80-12-17</HIREDATE>
<SAL>800</SAL>
<COMM/>
<DEPTNO>20</DEPTNO>
</rows>
<rows num="2">
<EMPNO>7499</EMPNO>
<ENAME>ALLEN</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>81-02-20</HIREDATE>
<SAL>1600</SAL>
<COMM>300</COMM>
<DEPTNO>30</DEPTNO>
</rows>
:
</data>