生成并保存XML文件

时间:2016-09-11 13:02:04

标签: php xml

这就是我想要做的事情:

单击按钮时,将创建XML结构并显示另存为对话框 似乎要求用户在哪里保存它。

总的来说,一切都很好。

问题是:保存的文件包含XML结构AND js,html代码

这就是我的代码的样子:

/*a lot of code before */

$domtree = new DOMDocument('1.0', 'UTF-8');
$domtree->formatOutput = true;
$xmlRoot = $domtree->createElement("xml");
$xmlRoot = $domtree->appendChild($xmlRoot);
//create and append other elements

//save it to a file using a dialog box
$file_name = "myFile.xml";
header('Content-Disposition: attachment;filename=' . $file_name);
header('Content-Type: text/xml');
echo $domtree->saveXML();

/* a lot of code after */

我确实意识到问题可能是关于标题或之前回应的东西。 但我不知道如何解决它。

我找到了类似情况的解决方案,但看起来源文件只包含生成和保存XML文件的代码。

就我而言,我需要更多代码。

2 个答案:

答案 0 :(得分:0)

解决了这个问题:

我添加了

ob_clean();
flush();
在回声和

之前

exit;
回声后

现在代码如下:

/*a lot of code before */

$domtree = new DOMDocument('1.0', 'UTF-8');
$domtree->formatOutput = true;
$xmlRoot = $domtree->createElement("xml");
$xmlRoot = $domtree->appendChild($xmlRoot);
//create and append other elements

//save it to a file using a dialog box
$file_name = "myFile.xml";
header('Content-Disposition: attachment;filename=' . $file_name);
header('Content-Type: text/xml');
ob_clean();
flush();
echo $domtree->saveXML();
exit;

/* a lot of code after */

答案 1 :(得分:0)

您的代码对我来说没问题(没有测试它,但它看起来有效且会正确执行),而且我还假设 $ xmlRoot 中的任何内容也是有效的。

您究竟是如何实现XML文件下载链接的?它是一个包含上述代码的php文件的链接吗?

为了将XML作为文件下载,您需要将代码作为“XML文件生成器”运行 - 这意味着“生成器”创建文件并以可下载的格式将其返回给浏览器(在浏览器端触发下载提示)。

经典方法就是这样,

生成器以下列格式返回标题:

header('Content-Disposition: attachment;filename=myFile.xml');
header('Content-Type: text/xml');

然后是XML输出:

echo $domtree->saveXML();

重要的是,在标题之前不要打印任何内容(甚至不是单个空格)。

然后,下载链接可能如下所示:

<a href="http://api.my-domain.com/download-as-xml/document/123">Download as XML</a>

最终用户点击它后,系统会提示他是否要将文件保存到他的计算机上(有些浏览器会自动执行此操作而不会询问)

如果你想用ajax做同样的事情,这是一个完全不同的故事。

希望它有所帮助!