Преобразование текстового файла в XML с использованием PHP - PullRequest
0 голосов
/ 04 декабря 2011

У меня есть несколько файлов в формате .txt (эти файлы либо сохраняются в папке, либо открываются с рабочего стола после выполнения).

Я хотел бы создать приложение на PHP, которое сможет извлекать эти файлы и сохранять их в формате XML, а затем динамически отображать с помощью XSLT.

Существуют ли методы, которые позволят мне это сделать?

Это код, который у меня есть до сих пор:

$fp = fopen('optim.txt', 'r');

$xml = new XMLWriter;
$xml->openURI('php://output');
$xml->setIndent(true); // makes output cleaner

$xml->startElement('qualité');
while ($line = fgetcsv($fp)) {

   $xml->startElement('qualité');
   $xml->writeElement('critere', $line[0]);
   $xml->writeElement('poids', $line[1]);
   $xml->writeElement('Vm', $line[2]);
   $xml->writeElement('SV', $line[3]);
   $xml->writeElement('critere', $line[4]);
   $xml->writeElement('poids', $line[5]);
   $xml->writeElement('Vm', $line[6]);
   $xml->writeElement('SV', $line[7]);
   $xml->writeElement('resultat', $line[8]);
   $xml->endElement();
}
$xml->endElement();

Однако, нет никакого результата, кто-нибудь может помочь мне найти, где я иду не так?

1 Ответ

0 голосов
/ 04 декабря 2011

Проблема с вашей линией: -

$xml->openURI('php://output');

Это отправляет вывод прямо в браузер клиента, что, я думаю, именно то, что вы хотите сделать. Однако вам необходимо установить правильные заголовки, чтобы отразить это.

Добавьте следующую строку в ваш код

header("Content-Type: text/xml");

и вы увидите результат прямо в вашем браузере. На самом деле не имеет значения, куда идет эта строка, но это должно быть до того, как какой-либо контент будет отправлен в браузер, лучше всего поместить его прямо перед $fp = fopen('optim.txt', 'r');

Вам также следует изменить имя самого внешнего элемента на любое значение множественного числа «qualité», чтобы у вас не было родительских и дочерних элементов с одинаковыми именами.

Кроме того, после $xml->setIndent(true); добавьте эту строку $xml->startDocument();, иначе ваш xml будет недействительным.

После еще нескольких копаний кажется, что необходимо установить часовой пояс по умолчанию (я не знаю почему), поэтому добавьте это в начало вашего скрипта: -

date_default_timezone_set("GMT"); //or whatever your default timezone is.

Что означает, что ваш код должен выглядеть следующим образом: -

date_default_timezone_set("GMT"); //or whatever your default timezone is.
header("Content-Type: text/xml"); //Added as part of answer
$fp = fopen('optim.txt', 'r');

$xml = new XMLWriter;
$xml->openURI('php://output');
$xml->startDocument(); // added as part of answer
$xml->setIndent(true); // makes output cleaner

$xml->startElement('qualités'); //changed as part of answer
while ($line = fgetcsv($fp)) {

   $xml->startElement('qualité');
   $xml->writeElement('critere', $line[0]);
   $xml->writeElement('poids', $line[1]);
   $xml->writeElement('Vm', $line[2]);
   $xml->writeElement('SV', $line[3]);
   $xml->writeElement('critere', $line[4]);
   $xml->writeElement('poids', $line[5]);
   $xml->writeElement('Vm', $line[6]);
   $xml->writeElement('SV', $line[7]);
   $xml->writeElement('resultat', $line[8]);
   $xml->endElement();
}
$xml->endElement();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...