我使用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');
谢谢
答案 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;