【问题标题】:Creating/Writing an XML file in PHP?在 PHP 中创建/编写 XML 文件?
【发布时间】:2012-03-24 16:38:08
【问题描述】:

我目前有一个用 PHP 编写的脚本,我在其中连接到 phpMyAdmin 中的数据库,然后将所有表值解析为 XML 文档。

下面是脚本的工作原理:

    $xmlBody .= "<XML>";
$sql_news = mysql_query("SELECT * FROM news_table");

$xmlBody .= "<News_Table>";

//this while loop churns out the values of our "news_table" table
while($row_news = mysql_fetch_array($sql_news)){
    // Set DB variables into local variables for easier use 
    $id_news = $row_news["news_id"];
    $author_news = $row_news["news_author"];
    $time_news = $row_news["news_time"];
    $title_news = $row_news["news_title"];
    $content_news = $row_news["news_content"];
    $desc_news = $row_news["news_description"];
    $image_news = $row_news["news_image"];

    $xmlBody .= '
<News_Table_Entry> 
    <DataID>' . $id_news . '</DataID> 
    <DataAuthor>' . $author_news . '</DataAuthor>
    <DataTime>' . $time_news . '</DataTime>
    <DataTitle>' . $title_news . '</DataTitle>
    <DataContent>' . $content_news . '</DataContent> 
    <DataDesc>' . $desc_news . '</DataDesc>
    <DataImage>' . $image_news . '</DataImage>
</News_Table_Entry>';
} // End while loop

$xmlBody .= "</News_Table>";

mysql_close(); // close the mysql database connection
$xmlBody .= "</XML>";
echo $xmlBody; 
?>

如何创建并将其输出为外部XML file?我已经成功地让这个脚本工作了,但是使用所有写出 XML 的方法都不起作用。使用

echo 'Wrote: ' . $doc->save("/tmp/test.xml") . ' bytes'; // Wrote: 72 bytes

函数不起作用,fwrite 函数也不起作用。几天来,我一直在努力解决这个问题,但我被告知要尝试的解决方案都没有奏效。任何帮助或见解将不胜感激!

【问题讨论】:

  • 为了可扩展性和维护,您应该研究序列化。查看pear.php.net/package/XML_Serializer/redirected
  • $doc ?您没有使用DOMDocumentSimpleXML,对吗?因此,save 方法没有被定义。
  • 只是将文本写入文件怎么样?

标签: php mysql xml database phpmyadmin


【解决方案1】:

根据您的代码,您已经在自己构建 XML 内容。 XML 文件只是普通的文本文件,因此在这种情况下,您不需要任何用于验证和呈现的特殊 XML 函数。相反,您可以简单地将文本保存到 .xml 文件中:

file_put_contents('/tmp/test.xml', $xmlBody);

file_put_contents 允许您放弃所有 fopen/fwrite 功能,因此这是将内容写入磁盘的最简单方法。


另一方面,如果您确实想学习构建具有所有花里胡哨的一致性的结构化 XML 文档,请查找 SimpleXMLXMLWriter。这样会增加一点开销,但手动进行所有标记可能会很笨拙,尤其是当一个拼写错误会使整个文档无效时。

【讨论】:

    【解决方案2】:

    这对你有帮助

    $xml_msg_in = fopen('/tmp/test.xml',"w");
    fwrite($xml_msg_in,$xmlBody); 
    fclose($xml_msg_in);
    

    【讨论】:

      【解决方案3】:

      你试过file_put_contents('/path/to/output.xml', $xmlBody);

      【讨论】:

        【解决方案4】:
        • 只是为了理解,您的echo $xmlBody; 行至少可以按预期工作吗?

        • 如果您尝试在某处使用 XML 文件但没有成功,请注意您缺少作为 XML 文件第一行的 XML 标头。

          <?xml version="1.0"?>
          
        • 请注意,根据您数据库中的数据,此标头可能需要指定更广泛的编码,例如 UTF-16。但是您应该选择您希望在该数据库中允许的字符集。

          <?xml version="1.0" encoding="UTF-16"?>
          
        • 代码示例末尾的?&gt; 是什么?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-23
          • 1970-01-01
          • 1970-01-01
          • 2012-11-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多