使用php发送xml文件的内容作为响应

时间:2009-12-23 20:28:00

标签: php xml

我使用php将xml写入文件,然后将文件数据作为响应发送到客户端的浏览器。 但是,我收到以下错误: 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 个答案:

答案 0 :(得分:4)

您发布的代码段在$friendList没有任何数据的情况下运行正常,因此问题在于您的数据。

我猜你要在<webpage></webpage>标签中输出网址,其中可能包含&等字符。 XML要求转义& ' " > <个字符。幸运的是,htmlspecialchars()就是这样做的。

尝试使用:

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

同样逃避其他数据也不是一个坏主意。

答案 1 :(得分:1)

您有一个永不打开的关闭“朋友”标记。将相关的修剪器更改为:

$_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);

答案 2 :(得分:0)

数组$friendList可能包含键和/或值,其中包含标记。如果是这种情况,我们的XML字符串$_xml将不是有效的XML。

答案 3 :(得分:0)

XML im getting是这样的:

<?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>   

答案 4 :(得分:0)

在提供文件之前没有理由写入文件。只需将其直接输出到客户端:

$_xml .="</friends>";
//Send the xml file as response
header('Content-type: text/xml');
echo $_xml;