繁体   English   中英

XML格式错误

[英]XML not well formed error

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

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

请帮忙。 谢谢。

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

  1. 你用来验证这个是错误的
  2. 你正在寻找与你的想法不同的东西

我肯定会尝试其他工具/浏览器/无论如何验证这一点。 此外,您可能希望将XML文件保存为发送到浏览器,并使用XMLStarlet (命令行XML工具包)进行检查。

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

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

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

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

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

xml version ='1.0'coding ='UTF-8'standalone ='yes'

使用单引号。

您是否尝试过使用这两个松散的日期和总标签作为属性?:

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

此外,xml可能非常敏感。 确保使用CDATA标签是合适的

它在WMHelp XMLPad 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)中包含一个签名(有时称为字节顺序标记),如果它存在,有时会混淆某些工具,如果不存在则很少。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM