上一部分演示了您如何能够利用 PHP 通过标准 SQL 转移 Oracle 数据库中的 XML 数据。实际上,Oracle XML DB 为您提供了将 XML 内容转入和转出 Oracle 数据库的不同策略。
例如,您可以使用行业标准的互联网协议(例如 FTP、HTTP 或 WebDAV)来将 XML 内容插入到数据库中。在这种情况下,您只需将包含基于
模式的 XML 内容的文件放到 Oracle XML DB 信息库中的一个文件夹里。然后 Oracle XML DB 将隐式地把相应的行插入到被指定为 XML 模式的默
认表的表中。
例如,为了增加一个以编程的方式通过 FTP 插入 XML 的函数,您可以向列表 1 的 MyDomDocument 类中添加一个 insertXMLByFTP() 公有方
法(如列表 9 所示)。
代码列表 9: insertXMLByFTP — SQL 的互联网协议替代方式
public function insertXMLByFTP($tagName, $table, $user, $pswd, $ftp_dir, $host, $port=2100, $timeout=30) {try {$items = parent::getElementsByTagName($tagName);$con_id = ftp_connect($host, $port, $timeout);$login = ftp_login($con_id, $user, $pswd);ftp_chdir($con_id, $ftp_dir);for ($i = 0; $i < $items->length; $i++) {$nodeXML = parent::saveXML($items->item($i)) ."n";$dest_file = $tagName .$i .'.xml';$temp = tmpfile();fwrite($temp, $nodeXML);fseek($temp, 0);if(!ftp_fput($con_id, $dest_file, $temp, FTP_ASCII))throw new Exception("Cannot put $dest_file");fclose($temp); } }catch (Exception $e) {throw $e; }print "Data have been submitted"; }
列表 10 中的 domXMLFTP_db.php 脚本显示了工作中的 insertXMLByFTP() 方法。(在试图运行 domXMLFTP_db.php 之前,您必须删除由于之
前的脚本运行而被插入到 employee 表中的所有行,以避免违反完整性约束。)
代码列表 10: domXMLFTP_db.PHP 执行 insertXMLByFTP 函数
addElement($dom, 'EMPLOYEES');$db = new dbConn5($user, $pswd, $conn);$sql="SELECT EMPNO, ENAME, JOB FROM EMP";$db->query($sql);while ($row = $db->fetch()) {$empl = $dom->addElement($root, 'EMPLOYEE');$empl->setAttribute('xmlns:xsi', 'httww.w3.org/2001/XMLSchema-instance');$empl->setAttribute('xsi:noNamespaceSchemaLocation', 'http://localhost:8080/public/emp.xsd');$emplno = $dom->addElement($empl, 'EMPNO', oci_result($row,'EMPNO'));$ename = $dom->addElement($empl, 'ENAME', oci_result($row,'ENAME'));$title = $dom->addElement($empl, 'TITLE', oci_result($row,'JOB')); }$dom->insertXMLByFTP('EMPLOYEE', 'employee', 'usr', 'pswd', '/public', 'localhost'); }catch(Exception $e) {print $e->getMessage(); }?>
总结:列表 10 中的 domXMLFTP_db.php 脚本为存储在 SCOTT/TIGER 演示模式下的 emp 表中的每一个行创建了相应的基于模式
的 employee XML 文档,然后将 XML 文档作为一个文件放到 Oracle XML DB 信息库的 /public 目录中。Oracle 数据库自动依次地将相应的行插
入到 PHPUSR 数据库模式中的 XMLType 的 employee 表中。