这就是我想要做的事情:
单击按钮时,将创建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文件的代码。
就我而言,我需要更多代码。
答案 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做同样的事情,这是一个完全不同的故事。
希望它有所帮助!