Проблема с вашей линией: -
$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();