XML 编写器 XML 输出

XML writer XML output

我正在开发 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();

不知何故不起作用。如果这是正确的方法,它只会将我带到一个带有 output.But 的空白页面,有人可以向我解释一下吗?

提前致谢

可以用openURI()方式输出文件中的内容。然后你就可以下载它了。使用它代替 openMemory().

$xml = new XMLWriter();

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

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

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

$xml->flush();

如果您想即时创建 XML 文档以提供下载,它是发送正确的 HTTP 响应 header 和制作 XML 的组合Writer 写入标准输出:

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:

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

# ...

参考文献: