簡體   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