在 PHP 中创建/编写 XML 文件?

Posted

技术标签:

【中文标题】在 PHP 中创建/编写 XML 文件?【英文标题】:Creating/Writing an XML file in PHP? 【发布时间】: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 方法没有被定义。 只是将文本写入文件怎么样? 【参考方案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; 是什么?

【讨论】:

以上是关于在 PHP 中创建/编写 XML 文件?的主要内容,如果未能解决你的问题,请参考以下文章

在 xml 文件中创建多个矩形形状

无法在 Visual Studio 中创建 xml 文件

如何添加我在 setcontentview() 函数中创建的 xml 文件

如何在 j2me 中创建保存和读取 XML 文件

如何在Java中创建具有特定结构的XML文件[重复]

在 php 中创建 xml 时删除 xml 版本标记