XML неправильно сформированная ошибка - PullRequest
3 голосов
/ 24 декабря 2009

У меня есть скрипт 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 ]

3 голосов
/ 24 декабря 2009

Вышеприведенное выглядит хорошо для меня (включая тот факт, что вы формируете XML через выделенный компонент) и либо:

  1. то, что вы используете для подтверждения, это неправильно
  2. вы смотрите на что-то отличное от того, что вы думаете

Я бы определенно попробовал другой инструмент / браузер / что угодно, чтобы проверить это. Кроме того, вы можете сохранить файл XML, отправленный в браузер, и проверить его с помощью XMLStarlet (инструментарий XML для командной строки).

Мне также интересно, если это проблема, которую мы не можем легко увидеть - проблема с кодировкой символов или проблема с порядком следования байтов (связанная с кодировками). Соответствует ли кодировка символов отправляемой веб-страницы / кодировка XML (UTF-8).

1 голос
/ 24 декабря 2009

Есть несколько бесплатных сайтов и инструментов для проверки правильности в XML.

В соответствии с XML Validator , когда я вставил ваш XML выше в текстовую область, он сказал: "ошибок не найдено".

Однако Validome говорит: «Не удается найти объявление элемента« books ».»

Возможно, предложение Джеффа об изменении date и total на атрибуты могло бы помочь. Вероятно, было бы легко попробовать это.

0 голосов
/ 04 марта 2013

xml версия = '1.0' кодировка = 'UTF-8' автономно = 'да'

используйте одинарные кавычки.

0 голосов
/ 25 декабря 2009

Убедитесь, что вы записываете UTF-8 или 7-битную кодировку ASCII в файл (проверьте с помощью текстового редактора или команды 'file', если он у вас есть) и что ваш контролер поддерживает это. Имейте в виду, что UTF-8 может включать подпись (иногда называемую меткой порядка байтов) в первых трех байтах (EF BB BF), которая иногда путает некоторые инструменты, если она есть, и редко, если это не так.

0 голосов
/ 24 декабря 2009

Он проверяет штраф в WMHelp XMLPad 3.0.1.0 и открывается нормально в FireFox 3.0.8 и IE7 без ошибок.

Единственное, что я могу видеть из копии и вставки вашего XML, это то, что за объявлением XML следует комбинация CR / LF (0x0D0x0A). Это зависит от платформы (Windows) и может быть проблемой на клиенте; однако вы не упомянули, кем был клиент, поэтому я не уверен, что это проблема.

0 голосов
/ 24 декабря 2009

Вы пытались использовать вместо этого эти два свободных тега даты и общее количество тегов?

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

Кроме того, xml может быть довольно чувствительным. Убедитесь, что для использования CDATA теги были подходящими

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...