Отправка содержимого XML-файла в качестве ответа с использованием php - PullRequest
1 голос
/ 23 декабря 2009

Я записал xml в файл, используя php, а затем отправил данные файла в ответ браузеру клиента. Но я получаю следующую ошибку: Ошибка синтаксического анализа XML: неправильно сформирован Ниже мой код. Есть ли способ это исправить?

$file= fopen("result.xml", "w");
$_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
$_xml .="<friends>";
$timestamp = time();
$_xml.="<date>".date("F jS, Y", $timestamp)."</date>"; //Like December 23rd, 2009
$_xml .="<total>".$totalResults."</total>";
foreach($friendList as $key => $value) { /*$friendList contains key value pairs*/
    $_xml.="<friend>";
    $_xml.="<name>".$key."</name>";
    $_xml.="<webpage>".$value."</webpage>";
    $_xml.="</friend>";
}
$_xml .="</friends>";
fwrite($file,$_xml);
fclose($file);

//Send the xml file as response
header('Content-type: text/xml');
readfile('result.xml');

Спасибо

Ответы [ 5 ]

4 голосов
/ 23 декабря 2009

Фрагмент отправленного вами кода отлично работает без данных в $friendList, поэтому проблема связана с вашими данными.

Я предполагаю, что вы выводите URL внутри тегов <webpage></webpage>, которые могут содержать такие символы, как &. XML требует экранирования символов & ' " > <. К счастью, htmlspecialchars () делает именно это.

Попробуйте использовать это:

$_xml.="<webpage>".htmlspecialchars($value,ENT_QUOTES)."</webpage>";

Неплохая идея также избежать других ваших данных.

1 голос
/ 23 декабря 2009

У вас есть закрывающий тег «друзья», который никогда не открывается. Измените соответствующий снимок на:

$_xml .="<friends>";
foreach($friendList as $key => $value) { /*$friendList contains key value pairs*/
    $_xml.="<friend>";
    $_xml.="<name>".$key."</name>";
    $_xml.="<webpage>".$value."</webpage>";
    $_xml.="</friend>";
}
$_xml .="</friends>";

Использование чего-то вроде XMLWriter значительно упрощает и облегчает написание кода такого типа:

$xml_writer = new XMLWriter();
$xml_writer->openMemory();

$xml_writer->startDocument('1.0', 'UTF-8', 'yes');
...
$xml_writer->startElement('friends');
...
$xml_writer->endElement(); //friends
...
$data = $xml_writer->outputMemory();
echo($data);
0 голосов
/ 24 декабря 2009

Нет причин записывать в файл перед его обслуживанием. Просто выведите его напрямую клиенту:

$_xml .="</friends>";
//Send the xml file as response
header('Content-type: text/xml');
echo $_xml;
0 голосов
/ 24 декабря 2009

XML, который я получаю, выглядит так:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<friends><date>December 23rd, 2009</date><total>2</total><friend><name>ABC</name><url>http://www.somesite.org/abc</url></friend><friend><name>PQR</name><url>http://www.somesite.org/pqr</url></friend></friends>   
0 голосов
/ 23 декабря 2009

Возможно, что массив $friendList имеет ключи и / или значения, в которых есть тег (ы). В этом случае наша строка XML $_xml не будет действительным XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...