SimpleXML терпит неудачу, когда вызывается дважды в том же исполнении - PullRequest
1 голос
/ 03 марта 2012

Я пытаюсь написать API для мобильного приложения. Я хотел бы вернуть данные в формате XML. Я использую библиотеку PHP, созданную для Wolfram Alpha, для запроса их данных и хочу, чтобы мой API действовал в качестве посредника для мобильного приложения и Wolfram Alpha. Всякий раз, когда я пытаюсь распечатать документ XML после использования PHP-библиотеки Wolfram Alpha, в Chrome появляется сообщение об ошибке:

error on line 7 at column 6: XML declaration allowed only at the start of the document

Я ничего не получаю в IE, а в Firefox я получаю:

XML Parsing Error: XML or text declaration not at start of entity
Location: http://myfitnessplate.com/api/food-search/name/thisissomethingnotfood/key/HWGCF-YASLT-HOSEC-OZWJH-HETKJ
Line Number 7, Column 1:
<?xml version="1.0"?>
^

Без других данных. Я открыл основной файл для PHP-библиотеки Wolfram Alpha (WolframAlphaEngine.php) и заметил, что он использует SimpleXML для запроса Wolfram Alpha в следующем коде

$xml = simplexml_load_file( $url );

Я получаю ошибку XML всякий раз, когда использую библиотеку. Если я не использую библиотеку, XML выводит просто отлично. Возможно ли, что "simplexml_load_file" по какой-то причине вызывает разрыв моего XML?

Мой код, который не работает при использовании библиотеки, использующей simplexml_load_file (это работает, когда библиотека не используется):

$xml = new SimpleXMLElement('<xml/>');
header("Content-Type:text/xml");
echo $xml->asXML();

1 Ответ

1 голос
/ 03 марта 2012

Я сильно подозреваю, что где-то есть семь строк вывода, прежде чем вы откроете свой XML. Вы должны заставить этот вывод замолчать, потому что он приводит к тому, что ваш xml становится недействительным, а ваши браузеры сходят с ума.

Возможно, это сообщения об ошибках из вашей библиотеки. Возможно, в ваших файлах php есть начальные или конечные пробелы. Единственный способ узнать это - увидеть необработанный вывод до того, как браузер начнет его анализировать.

...