php xmlwriter - 可以使用 resource/file 指针而不是路径吗?
php xmlwriter - possible to take a resource/file pointer instead of path?
而不是
$path_out = 'output.xml';
$xw = new XMLWriter();
$xw->openURI($path_out);
是否可以使用另一种方法或任何其他方式来做类似的事情:
$path_out = 'output.xml';
$fp = open($path_out, 'w');
$xw = new XMLWriter();
$xw->openURI($fp);
不,这确实很糟糕。 XMLWriter/XMLReader 组合应该运行 'streaming' 这很棒,但是它们不能与已经打开的流一起工作。这似乎是一个重大疏忽。
有点晚了,但这应该是可能的,因为提供的 uri 支持自定义协议。因此,如果您创建一个包装资源的自定义包装器,您应该能够直接写入包装的资源。
我创建了一个小型库,因为我遇到了同样的问题,你可以找到 here。
因此,对于您的示例,您可以这样做:
$fd = fopen('output.xml', 'w');
StreamWrapper::register($fd, 'output.xml');
$writer = new \XMLWriter();
$writer->openUri('wrapper://output.xml');
而不是
$path_out = 'output.xml';
$xw = new XMLWriter();
$xw->openURI($path_out);
是否可以使用另一种方法或任何其他方式来做类似的事情:
$path_out = 'output.xml';
$fp = open($path_out, 'w');
$xw = new XMLWriter();
$xw->openURI($fp);
不,这确实很糟糕。 XMLWriter/XMLReader 组合应该运行 'streaming' 这很棒,但是它们不能与已经打开的流一起工作。这似乎是一个重大疏忽。
有点晚了,但这应该是可能的,因为提供的 uri 支持自定义协议。因此,如果您创建一个包装资源的自定义包装器,您应该能够直接写入包装的资源。
我创建了一个小型库,因为我遇到了同样的问题,你可以找到 here。
因此,对于您的示例,您可以这样做:
$fd = fopen('output.xml', 'w');
StreamWrapper::register($fd, 'output.xml');
$writer = new \XMLWriter();
$writer->openUri('wrapper://output.xml');