У меня есть 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'); ?>
Что может быть причиной ошибки?
Пожалуйста помоги. Спасибо.
Вышеприведенное выглядит хорошо для меня (в том числе тот факт, что вы формируете XML через выделенный компонент) и либо:
Я бы определенно попробовал другой инструмент / браузер / что бы проверить это. Кроме того, вы можете сохранить 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'
используйте одиночную кавычку.