php - 如何使用php将mysql数据导出到xml

标签 php php-5.3 php-5.5 php-5.6

下面的代码用于将 mysql 表中的数据导出为 xml 文件。我尝试了几个代码但没有得到结果。请检查并帮助我。

目前得到的结果是

8sarathsarathernakulam423432washington9rahulrahulernakulam21212121newyork10aaaa3london11bbbb1newyork12cccc2washington13dddd3london

代码

<?php
require_once "classes/dbconnection-class.php";
if(isset($_POST['export'])){
    header('Content-type: text/xml');
    $xml          = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
    $root_element = "addressbook"; //fruits
    $xml         .= "<$root_element>";
    $query        = "SELECT AB.id, AB.name, AB.firstname, AB.street, AB.zipcode, AB.city_id, CI.city FROM address_book AS AB INNER JOIN city AS CI ON AB.city_id = CI.id";
    $result      = $mysqli->query($query);
    if (!$result) {
        die('Invalid query: ' . $mysqli->error());
    }

    while($result_array = $result->fetch_assoc()){
        $xml .= "<address>";
        foreach($result_array as $key => $value)
        {
            //$key holds the table column name
            $xml .= "<$key>";

            //embed the SQL data in a CDATA element to avoid XML entity issues
            $xml .= "<![CDATA[$value]]>";

            //and close the element
            $xml .= "</$key>";
        }

        $xml.="</address>";
    }
    $xml .= "</$root_element>";
    header ("Content-Type:text/xml");
    //header('Content-Disposition: attachment; filename="downloaded.xml"');
    echo $xml;
}
?>

浏览器显示

<?xml version="1.0" encoding="UTF-8"?><addressbook><address><id><![CDATA[8]]></id><name><![CDATA[sarath]]></name><firstname><![CDATA[sarath]]></firstname><street><![CDATA[ernakulam]]></street><zipcode><![CDATA[42343]]></zipcode><city_id><![CDATA[2]]></city_id><city><![CDATA[washington]]></city></address><address><id><![CDATA[9]]></id><name><![CDATA[rahul]]></name><firstname><![CDATA[rahul]]></firstname><street><![CDATA[ernakulam]]></street><zipcode><![CDATA[2121212]]></zipcode><city_id><![CDATA[1]]></city_id><city><![CDATA[newyork]]></city></address><address><id><![CDATA[10]]></id><name><![CDATA[a]]></name><firstname><![CDATA[a]]></firstname><street><![CDATA[a]]></street><zipcode><![CDATA[a]]></zipcode><city_id><![CDATA[3]]></city_id><city><![CDATA[london]]></city></address><address><id><![CDATA[11]]></id><name><![CDATA[b]]></name><firstname><![CDATA[b]]></firstname><street><![CDATA[b]]></street><zipcode><![CDATA[b]]></zipcode><city_id><![CDATA[1]]></city_id><city><![CDATA[newyork]]></city></address><address><id><![CDATA[12]]></id><name><![CDATA[c]]></name><firstname><![CDATA[c]]></firstname><street><![CDATA[c]]></street><zipcode><![CDATA[c]]></zipcode><city_id><![CDATA[2]]></city_id><city><![CDATA[washington]]></city></address><address><id><![CDATA[13]]></id><name><![CDATA[d]]></name><firstname><![CDATA[d]]></firstname><street><![CDATA[d]]></street><zipcode><![CDATA[d]]></zipcode><city_id><![CDATA[3]]></city_id><city><![CDATA[london]]></city></address></addressbook>

最佳答案

当我们处理 XML 和 HTML 时,最好的处理方式是永远通过解析器。 在这种特殊情况下,使用解析器进行操作可以保证有效的 XML 和干净、简短的代码。

定义 mySQL 查询后,我们初始化一个新的 DOMDocument有了版本和编码,然后我们设置他的->formatOutput设置为 True 以缩进格式打印出 XML:

$query = "SELECT AB.id, AB.name, AB.firstname, AB.street, AB.zipcode, AB.city_id, CI.city FROM address_book AS AB INNER JOIN city AS CI ON AB.city_id = CI.id";

$dom   = new DOMDocument( '1.0', 'utf-8' );
$dom   ->formatOutput = True;

然后,我们创建根节点并将其附加到 DOMDocument :

$root  = $dom->createElement( 'addressbook' );
$dom   ->appendChild( $root );

此时,执行mySQL查询后,我们执行一个while遍历每个结果行;对于每一行,我们创建一个空节点 <address> , 然后我们执行 foreach遍历每一行的字段。对于每个字段,我们创建一个带有标签作为字段键的空子节点,然后我们将字段值作为 CDATA 附加到子节点,并将相同的子节点附加到 <address>。节点;在每个 while 的末尾循环,每个 <address>节点附加到根节点:

$result     = $mysqli->query( $query );
while( $row = $result->fetch_assoc() )
{
    $node = $dom->createElement( 'address' );
    foreach( $row as $key => $val )
    {
        $child = $dom->createElement( $key );
        $child ->appendChild( $dom->createCDATASection( $val) );
        $node  ->appendChild( $child );
    }
    $root->appendChild( $node );
}

现在,您的 XML 已准备就绪。

如果您想将其保存到文件中,您可以通过以下方式完成:

$dom->save( '/Your/File/Path.xml' );

否则,如果您更喜欢将其作为 XML 发送,则必须使用此代码:

header( 'Content-type: text/xml' );
echo $dom->saveXML();
exit;

如果您想要在 HTML 页面中输出它,您可以编写以下代码:

echo '<pre>';
echo htmlentities( $dom->saveXML() );
echo '</pre>';

关于php - 如何使用php将mysql数据导出到xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437538/

相关文章:

PHP 登录表单 mysql 和 bootstrap 风格给出错误

php - 在 MAMP 中停止缓存 PHP 5.5.3

php - 递归 ksort : not sort the array

php - Yii2 在 View 和 Controller 之间共享命名空间

php - MySql、Php 未设置为 UTF8

javascript - 知道错误的确切路径

php - 使用 mysql_fetch_object 时出现奇怪的 MySQL 错误 "Empty row packet body"(PHP 5.3.3)

php - mssql_connect 从 PHP 5.3 开始不再工作

php - 当作为参数传递时,PHP 如何解释和评估函数和匿名函数?

php - OS X 上的 xdebug 部分工作(例如,在终端而不是浏览器中打印堆栈跟踪)。