2015-08-18 6 views
1

Я работаю над конвертером PostgreSQL в XML. Который должен извлекать значения разных таблиц. Соответствующий код ниже:XML-запись 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(); 

Не работает как-то. Это приводит меня только к пустой странице с выходом. Но если это будет правильный метод, может кто-нибудь объяснить это мне?

Спасибо заранее

ответ

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(); 
+0

Спасибо, но теперь Я получаю сообщение об ошибке: 'не удалось открыть поток: файловая система только для чтения (2)'. Как я могу это решить? И я думаю, вы забыли \t '$ xml-> openMemory(); '? – TechTreeDev

+0

Метод 'XMLWriter :: openMemory()' предназначен для использования памяти для вывода строки, если вы хотите записать ее в файл, вам не нужно ее использовать. Проверьте наличие файлов и дайте разрешения на запись в Apache в каталоге. – BernatL

+0

Хорошо, я нашел проблему. – TechTreeDev

1

Если вы хотите создать документ 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'); 

# ... 

Ссылки: