PHP的SAX解析器和DOM解析器的运用(一)——导出数据库数据并生成XML文档

为了能够让不同平台的异构数据库之间能够互相交换数据,完成一个数据库的数据迁移到另一个数据库中,可以采用XML文档作为数据交换的信息载体,把一个数据库的数据转换为XML文档,将XML文档通过网络传输到另一个系统,再由另一个系统平台程序将XML文档导入数据库。
用DOM和SAX解析器将数据库中的数据导出来生成XML,步骤基本为下:
1. 建立与数据库的连接。
2. 执行SQL语句从数据库中检索到数据。
3. 将检索到的数据转换为XML文档。
4. 若有必要还可将XML文档转化为HTML文档。
例如:

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>Select user info from DB</title>
</head>
<body>
<?php
include "DBconnection.php";//负责连接数据库的文件
$sql="select * from user_info";
$result=mysqli_query($conn,$sql);
if(mysqli_num_rows($result)){
    $dom=new DOMDocument('1.0',"utf-8");
    $dom->formatOutput=true;
    $root=$dom->createElement("userinfo");
    $dom->appendChild($root);
    while(list($uname,$upassword,$idnumber,$phonenumber)=mysqli_fetch_array($result)){
        $user=$dom->createElement("user");
        $user->setAttribute('IDnumber',$idnumber);
        $user->appendChild($dom->createElement("uname",$uname));
        $user->appendChild($dom->createElement("upassword",$upassword));
        $user->appendChild($dom->createElement("phonenumber",$phonenumber));
        $root->appendChild($user);
    }
    $xml=$dom->saveXML();
    $dom->save("userinfo.xml");
    //echo $xml;
}
mysqli_close($conn);
//以下数据保存开始标签的HTML标记
$startTags=array(
    //标签名需要大写!
    'USERINFO'=>'<table border="1" cellspacing="0" cellpadding="5">',
    'USER'=>'<tr>',
    'IDNUMBER'=>'<td bgcolor="silver">',
    'UNAME'=>'<td bgcolor="silver">',
    'UPASSWORD'=>'<td bgcolor="silver">',
    'PHONENUMBER'=>'<td bgcolor="silver">',
);
$endTags=array(
    'USERINFO'=>'</table>',
    'USER'=>'</tr>',
    'IDNUMBER'=>'</td>',
    'UNAME'=>'</td>',
    'UPASSWORD'=>'</td>',
    'PHONENUMBER'=>'</td>',
);
//以下函数为各个标签的回调函数
function startElementHandler($parser,$root,$attribute){
    global $startTags;
    if($startTags [$root]){
        //查找本开始元素对应的数组元素
        echo $startTags [$root];
    }
}
function endElementHandler($parser,$root){
    global $endTags;
    if($endTags [$root]){
        echo $endTags [$root];
    }
}
function characterDataHandler($parser,$data){
    echo utf8_decode($data);
}

$xml=utf8_encode($xml);
$xml_parser=xml_parser_create("utf-8");
xml_set_element_handler($xml_parser,"startElementHandler","endElementHandler");
xml_set_character_data_handler($xml_parser,"characterDataHandler");
if(!xml_parse($xml_parser,$xml)){
    $error_code=xml_get_error_code($xml_parser);
    die("XML解析错误(错误代码".$error_code."):".xml_error_string($error_code)."<br>错误发生的行"
        .xml_get_current_line_number($xml_parser) ."错误发生的列".xml_get_current_column_number($xml_parser)
        ."错误发生的字节".xml_get_current_byte_index($xml_parser));
}

xml_parser_free($xml_parser);
?>
</body>
</html>

运行后的效果大致如下:(即以表格的形式从数据库中读出数据并将相应的标记转化为HTML标记)
运行后的效果
在上述程序中,我查询的user_info表的具体创建如下,可以蛮参考一下:

CREATE TABLE user_info (
   uname VARCHAR(20) NOT NULL KEY,
   upassword VARCHAR(20) NOT NULL,
   idnumber VARCHAR(20) NOT NULL,
   phonenumber VARCHAR(20) NOT NULL
)

猜你喜欢

转载自blog.csdn.net/Kuniklo/article/details/81608713