XML编写器XML输出

时间:2015-08-18 09:15:42

标签: php xml xmlwriter

我正在研究PostgreSQL到XML转换器。哪个应该提取不同表的值。以下相关代码:

        $xml = new XMLWriter();
        $xml->openMemory();
        $xml->setIndent(true);
        $xml->startDocument();

    $query = new data_DataBaseQuery();
        $xml->startElement();
     .......
        $xml->endElement();

如果我使用echo htmlentities($xml->outputMemory());,我会得到我想要的输出。 但我想使用一个特定的名称使导出的文件可以加载。

你能帮助我吗?

$xml->openURI('test.xml');
   ...
$xml->flush();

以某种方式不起作用。它只引导我输出一个空页面。但如果这是正确的方法,有人可以解释一下吗?

提前谢谢

2 个答案:

答案 0 :(得分:3)

如果您想动态创建XML文档,那么它就是发送正确的HTTP响应标头并使 XMLWriter 写入标准输出的组合:

header('Content-type: text/xml');

$writer = new XMLWriter();
$writer->openURI('php://output');
$writer->setIndent(true);
$writer->startDocument();

$query = new DataBaseQuery();
$writer->startElement();
# ...
$writer->endElement();

# ...

$writer->endDocument();
$writer->flush();

这应该使浏览器显示 XML文件 - 这样您就可以轻松验证创建XML是否有效。

要使其提供下载对话框,您必须指定另外的第二个标题:

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

# ...

参考文献:

答案 1 :(得分:1)

您可以使用openURI()方法输出文件中的内容。之后,您将能够下载它。使用它而不是openMemory()

$xml = new XMLWriter();

$xml->openURI("test.xml");

$xml->setIndent(true);
$xml->startDocument();

$query = new data_DataBaseQuery();
    $xml->startElement();
 .......
    $xml->endElement();

$xml->flush();