Вместо того чтобы делать
$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 должна работать с потоковым режимом, что здорово, но тогда они не могут работать с уже открытыми потоками. Это похоже на серьезную оплошность.
Немного поздно, но это должно быть возможно, потому что предоставленный URI поддерживает пользовательский протокол. Таким образом, если вы создаете пользовательскую оболочку, которая оборачивается вокруг ресурса, вы сможете писать напрямую в упакованный ресурс.
Я создал небольшую библиотеку, потому что у меня была та же проблема, и вы могли найти это Вот.
Итак, для вашего примера вы можете сделать:
$fd = fopen('output.xml', 'w');
StreamWrapper::register($fd, 'output.xml');
$writer = new \XMLWriter();
$writer->openUri('wrapper://output.xml');