XML格式不正确错误
我有一个php脚本,它将xml数据写入文件,另一个将此文件的内容作为响应发送给客户端。 但是在客户端,即时得到以下错误: 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');
?>
什么可能导致错误?
请帮忙。 谢谢。
您是否尝试过使用作为替代属性?:
<books date="December 24th" total="2">
另外,XML可以说是相当敏感的2宽松的日期和总的标签。确保使用适当的CDATA标签
无论日期/总是属性或元素无关与是否良好地形成-XML的格式。这是一个设计决定。 – 2009-12-24 20:14:46
-1甚至暗示在这种情况下CDATA可能是有用的。对于CDATA来说,恰当的使用案例非常少,即使您对于垃圾处理特别不小心,也可以用一只手的手指数出它们。 – 2009-12-27 17:40:56
有一些免费的网站和工具用于检查XML中的有效性。
根据XML Validator,当我将上面的XML粘贴到textarea中时,它表示“找不到错误”。
但是,Validome表示“找不到元素'book'的声明。”
也许杰夫的建议将date
和total
更改为属性可能会有所帮助。这可能很容易尝试。
变更书,总的子元素属性,但仍然得到同样的错误:(。 – joew 2009-12-24 20:18:48
正如我上面提到的,日期/总是否属性或元素无关与是否合式-XML的格式。这是一个设计决策。 – 2009-12-24 20:21:04
以上对我来说很好(包括你通过形成一个专门的组件XML的事实),要么:
- 你使用来验证这是错误的什么
- 你”再看看你认为你不同的东西
我肯定会尝试另一种工具/浏览器/无论如何来验证这一点。另外,您可能希望将XML文件保存为发送给浏览器,并使用XMLStarlet(命令行XML工具包)对其进行检查。
我想知道如果这是一个我们无法轻易看到的问题 - 字符编码问题或字节顺序标记问题(与编码有关)。您发送的网页的字符编码是否与XML(UTF-8)的编码不同?
感谢您的答复布赖恩。如何检查网页IM的字符编码是否发送与从XML的编码/不同(UTF-8)? – joew 2009-12-24 20:28:53
也许您在使用Firebug的Firefox的HTTP标头或的LiveHTTPHeaders? – 2009-12-24 20:46:24
+1提的字节顺序标记。如果这两个PHP和XML文件中包含这些,就混淆了XML解析器,因为BOM应该只出现在文件的开始 – 2009-12-24 21:57:52
它在WMHelp XMLPad 3.0.1.0中验证正常,并在FireFox 3.0.8和IE7中正常打开,没有错误。
我可以从XML的复制和粘贴中看到的唯一一件事情是,XML声明后面跟着一个CR/LF组合(0x0D0x0A)。这是平台特定的(Windows),可能是客户端的问题;你没有提到客户是什么,但是,我不能确定这是否是问题所在。
确保你正在编写UTF-8或7位ASCII编码的文件(测试用文本编辑器或“文件”命令,如果你有的话),你的检查支持它。请记住,UTF-8可以在前三个字节(EF BB BF)中包含一个签名(有时称为字节顺序标记),如果它存在,有时会混淆某些工具,而如果不是这样,则很少。
XML版本= '1.0' 编码= 'UTF-8' 独立= '是'
使用单引号。
你用什么来查看xml客户端? IE浏览器? FF?什么版本? – James 2009-12-24 20:08:31
得到同样的错误在这两个Firefox 3.5及IE 8. – joew 2009-12-24 20:18:08