Ошибка XML неправильно сформирована

У меня есть php-скрипт, который записывает xml-данные в файл и другой, который отправляет содержимое этого файла клиенту в качестве ответа. Но на стороне клиента im получает следующую ошибку: Ошибка анализа 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://img.ruphp.com/php/f</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'); ?> 

Что может быть причиной ошибки?

Пожалуйста помоги. Спасибо.

Solutions Collecting From Web of "Ошибка XML неправильно сформирована"

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

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

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

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

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

Согласно XML Validator , когда я вставил ваш XML в текстовое поле, он сказал: «ошибок не найдено».

Однако Validome говорит: «Невозможно найти декларацию элементов« книги ».

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

Пробовали ли вы использовать эти 2 свободные даты и общие теги в качестве атрибутов?

 <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 в файл (протестируйте текстовый редактор или команду «файл», если он у вас есть), и ваша контрольная панель поддерживает его. Имейте в виду, что UTF-8 может включать подпись (иногда называемую знаком байтового порядка) в первых трех байтах (EF BB BF), которая иногда путает некоторые инструменты, если она есть, и редко, если это не так.

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

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