|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
PHPマニュアル より。。。注意: この拡張は実験的なものではありません。しかしながら、PHP 5 では決してリリースされないでしょう。また、PHP 4 でのみ配布されます。 もし PHP 5 でDOM XML をサポートする必要がある場合、 DOM 拡張を使用することができます。 この domxml 拡張は DOM 拡張と互換性はありません。
PHPのDOM XML関数を使った例として、OracleSELECTしたデータをそのままXML形式で出力するサンプルを作ってみました。イメージは、Oracle8.1.7iから標準で付属しているツール「Oracle XDK」で、カラム名がそのまま要素名(タグ名)にしています。
PEARでは、XML_sql2xmlパッケージが同様の機能を持っているようです
●PHPスクリプト
<?php
$conn = OCILogon("scott", "tiger", "orcl");
$sql = "SELECT * FROM emp";
$stmt = OCIParse($conn, $sql);
OCIExecute($stmt);
$col = OCINumCols($stmt);
if(!$doc = domxml_new_xmldoc("1.0")) {
echo "Error while parsing the document\n";
exit;
}
$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++) {
$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);
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>
|