【问题标题】:Using PHP DOM to create XML files from MySQL data使用 PHP DOM 从 MySQL 数据创建 XML 文件
【发布时间】:2012-04-04 10:07:23
【问题描述】:

我创建了一个 MySQL 表,并希望将表的内容保存在 XML 文件中以供其他应用程序使用。我可以很好地访问数据并在浏览器窗口上回显数据,但是在使用 DomDocument::save('thexmlfile.xml') 保存时,我看不到在正在运行的 PHP 文件的目录位置创建的任何新文件。

【问题讨论】:

    标签: php mysql xml dom


    【解决方案1】:

    您必须从 mysql 数据创建 dom xml,然后将其保存在 xml 文件中。示例:

    $sql = 'select * from messages';
    $run = mysql_query($sql, $link);
    
    if( $run && mysql_num_rows( $run ) ) {
        $doc = new DOMDocument( '1.0' );
        $doc->formatOutput = true;
        $doc->preserveWhiteSpace = true;
    
        $root = $doc->createElement( 'data' );
        $doc->appendChild( $root );
    
        while( ( $fetch = mysql_fetch_assoc( $run ) )!== false ) {
            $node = $doc->createElement( 'node' );
            $root->appendChild( $node );
    
            foreach( $fetch as $key => $value ) {
                createNodes( $key, $value, $doc, $node );
            }
        }
        $doc->save("thexmlfile.xml");
    }
    
    function createNodes( $key, $value, $doc, $node ) {
        $key = $doc->createElement( $key );
        $node->appendChild( $key );
        $key->appendChild( $doc->createTextNode( $value ) );
    }
    

    现在,您应该会看到 xml 文件。

    希望,它会有所帮助。

    【讨论】:

    • 谢谢@Pushpesh。问题是,我现在收到一个错误“XML Parsing Error: syntax error Location: protocal://localhost/practice/displayQueue.php Line Number 1, Column 1:Data not found。”当我注释行 $doc->save("thexmlfile.xml") 并添加 echo doc->saveXML(); ^
    • 好的,你有我在我的例子中给出的mysql表结构吗……或者如果你有一个单独的结构,把它贴在这里……我会做适当的改变……
    • 我使用 CREATE TABLE messages (id int(10) unsigned NOT NULL auto_increment, senderNumber varchar(50) 默认 NULL, smsMessage varchar(1600) 默认 NULL 创建了表, sentTime 时间戳 NULL 默认 CURRENT_TIMESTAMP,receivedTime 日期时间默认 NULL,operator varchar(50) 默认 NULL,messageType varchar(50) 默认 'SMS:TEXT',主键 (id)) ENGINE=MyISAM ;现在在显示时我只想显示 3 个字段 senderNumber、smsMessage 和 timeReceived。
    【解决方案2】:

    嗯,你的问题是关于DOM,接受的答案是关于DOM,但你似乎不需要这个功能,那么libxml的兄弟SimpleXML似乎更直接......我假设您的问题早已结束,但只是为了完整起见:

    $sql = 'select * from messages';
    $run = mysql_query($sql, $link);
    
    if( $run && mysql_num_rows( $run ) ) {
        $xml = new SimpleXMLElement('<data/>');
        while($fetch = mysql_fetch_assoc($run)) {
            $node = $root->addChild('node');
            foreach( $fetch as $key => $value ) {
                $node->addChild($key,$value);
            }
        }
        $xml->asXML("thexmlfile.xml");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-19
      • 2012-04-23
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2015-03-09
      • 1970-01-01
      相关资源
      最近更新 更多