我有一个php脚本将xml数据写入文件,另一个脚本将此文件的内容作为响应发送到客户端。 但在客户端,我得到以下错误: XML解析错误:格式不正确 当我查看页面的来源时,我看到的XML如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<books><date>December 24th, 2009</date><total>2</total><book><name>Book 1</name><url>http://www.mydomain.com/posters/68370/img.jpg</url></book><book><name>Book 2</name><url>http://www.anotherdomain.com/posters/76198/img1.jpg</url></book></books>
在file1.php中,我有以下代码将XML写入文件:
$file= fopen("book_results.xml", "w");
$xml_writer = new XMLWriter();
$xml_writer->openMemory();
$xml_writer->startDocument('1.0', 'UTF-8', 'yes');
$xml_writer->startElement('books');
$xml_writer->writeElement('date',get_current_date()); // Like December 23rd, 2009
$xml_writer->writeElement('total',$totalResults);
foreach($bookList as $key => $value) { /* $bookList contains key value pairs */
$xml_writer->startElement('book');
$xml_writer->writeElement('name',$key);
$xml_writer->writeElement('url',$value);
$xml_writer->endElement(); //book
}
$xml_writer->endElement(); //books
$xml_data = $xml_writer->outputMemory();
fwrite($file,$xml_data);
fclose($file);
在index.php中,我有以下代码将文件内容作为响应发送
<?php
//Send the xml file contents as response
header('Content-type: text/xml');
readfile('book_results.xml');
?>
可能导致错误的原因是什么?
请帮忙。 谢谢。
答案 0 :(得分:3)
以上看起来对我很好(包括你通过专用组件形成XML的事实)和:
我肯定会尝试其他工具/浏览器/无论如何验证这一点。此外,您可能希望将XML文件保存为发送到浏览器,并使用XMLStarlet(命令行XML工具包)进行检查。
我也想知道这是否是一个我们无法轻易看到的问题 - 字符编码问题或字节顺序标记问题(与编码有关)。您发送的网页的字符编码是否与XML的编码(UTF-8)不一致。
答案 1 :(得分:1)
有一些免费的网站和工具可以检查XML的有效性。
根据XML Validator,当我将上面的XML粘贴到textarea时,它说“没有发现错误”。
但是,Validome说“无法找到元素'书籍'的声明。”
也许Jeff建议将date
和total
更改为属性可能有所帮助。尝试这个可能很容易。
答案 2 :(得分:0)
您是否尝试过将这2个松散日期和总标记用作属性?:
<books date="December 24th" total="2">
此外,xml可能非常敏感。确保使用CDATA标签是合适的
答案 3 :(得分:0)
它在WMHelp XMLPad 3.0.1.0中验证正常,并在FireFox 3.0.8和IE7中正常打开而没有错误。
从XML的复制和粘贴中我唯一能看到的是XML声明之后是CR / LF组合(0x0D0x0A)。这是特定于平台的(Windows),可能是客户端的问题;但是,你没有提到客户端是什么,所以我不能确定这是不是问题。
答案 4 :(得分:0)
确保您正在为文件编写UTF-8或7位ASCII编码(使用文本编辑器或'file'命令进行测试,如果有的话),并且您的检查器支持它。请记住,UTF-8可以在前三个字节(EF BB BF)中包含一个签名(有时称为字节顺序标记),如果它存在,有时会混淆某些工具,如果不存在则很少。
答案 5 :(得分:0)
xml version ='1.0'coding ='UTF-8'standalone ='yes'
使用单引号。