XML格式错误

时间:2009-12-24 19:59:41

标签: php xml

我有一个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');
?>

可能导致错误的原因是什么?

请帮忙。 谢谢。

6 个答案:

答案 0 :(得分:3)

以上看起来对我很好(包括你通过专用组件形成XML的事实)和:

  1. 您用来验证这是错误的
  2. 你正在寻找与你认为的不同的东西
  3. 我肯定会尝试其他工具/浏览器/无论如何验证这一点。此外,您可能希望将XML文件保存为发送到浏览器,并使用XMLStarlet(命令行XML工具包)进行检查。

    我也想知道这是否是一个我们无法轻易看到的问题 - 字符编码问题或字节顺序标记问题(与编码有关)。您发送的网页的字符编码是否与XML的编码(UTF-8)不一致。

答案 1 :(得分:1)

有一些免费的网站和工具可以检查XML的有效性。

根据XML Validator,当我将上面的XML粘贴到textarea时,它说“没有发现错误”。

但是,Validome说“无法找到元素'书籍'的声明。”

也许Jeff建议将datetotal更改为属性可能有所帮助。尝试这个可能很容易。

答案 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'

使用单引号。