Php XML格式不正确错误

Php XML格式不正确错误,php,xml,Php,Xml,我有一个将xml数据写入文件的php脚本,还有一个将该文件的内容作为响应发送给客户端。 但是在客户端,我得到了以下错误: XML解析错误:格式不正确 当我查看页面的源代码时,我看到的XML如下所示: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <books><date>December 24th, 2009</date><total>2</total><

我有一个将xml数据写入文件的php脚本,还有一个将该文件的内容作为响应发送给客户端。 但是在客户端,我得到了以下错误: 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>
在index.php中,我有以下代码将文件内容作为响应发送

<?php
    //Send the xml file contents as response
    header('Content-type: text/xml');
    readfile('book_results.xml');
?>

是什么导致了错误

请帮忙。
谢谢。

您是否尝试过使用这两个松散日期和总计标记作为属性

<books date="December 24th" total="2">


此外,xml可能非常敏感。确保使用适当的CDATA标记

有一些免费网站和工具用于检查XML中的有效性

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

但是,表示“找不到元素‘books’的声明”


Jeff建议将
date
total
更改为属性,这或许会有所帮助。这可能很容易尝试。

以上内容对我来说很好(包括通过专用组件形成XML的事实),并且:

  • 你用什么来验证这是错误的
  • 你所看到的与你所认为的不同
  • 我肯定会尝试其他工具/浏览器/任何东西来验证这一点。此外,您可能希望将XML文件保存为发送到浏览器的文件,并使用(命令行XML工具包)进行检查

    我还想知道这是一个我们不容易看到的问题——字符编码问题还是字节顺序标记问题(与编码有关)。您发送的网页的字符编码是否与XML(UTF-8)的编码匹配/不同。

    它在3.0.1.0中验证良好,在FireFox 3.0.8和IE7中打开良好,没有错误


    从XML的复制和粘贴中,我唯一能看到的是XML声明后面跟着CR/LF组合(0x0D0x0A)。这是特定于平台的(Windows),可能是客户端的问题;但是,您没有提到客户端是什么,因此我无法确定这是否是问题所在。

    确保您正在向文件写入UTF-8或7位ASCII编码(如果有,请使用文本编辑器或“file”命令进行测试),并且您的检查程序支持它。请记住,UTF-8可以在前三个字节(EF BB BF)中包含一个签名(有时称为字节顺序标记),如果有,有时会混淆一些工具,如果没有,则很少混淆。


    使用单引号。

    您使用什么来查看xml客户端?艾美?FF?什么版本?在Firefox 3.5和IE 8中都会出现相同的错误。日期/总数是属性还是元素与XML格式是否正确无关。这是一个设计决策。-1甚至建议CDATA在这种情况下可能有用。CDATA的正确使用案例非常少,即使你对垃圾处理非常粗心,你也可以用一只手数一数。将book和total的子元素更改为attributes,但仍然会出现相同的错误:(.如上所述,date/total是属性还是元素与XML的格式是否正确无关。这是一个设计决策。感谢您的回复。如何检查im发送的网页的字符编码是否与XML的编码匹配/不同(UTF-8)?也许可以使用Firebug或LiveHttpHeaders检查Firefox中的HTTP头?+1以提及字节顺序标记。如果PHP和XML文件都包含它们,则可能会混淆XML解析器,因为BOM应该只出现在文件的开头
    <books date="December 24th" total="2">