PHP «Ошибка синтаксического анализа XML: объявление XML или текста не в начале объекта»

Мой процессор API возвращает данные в одном из нескольких форматов, обозначенных ключевым словом «тип» в запросе. Я могу вызвать, например, заголовок JSON, используя следующий метод, но это не работает для XML. Есть ли способ вызвать это без ошибки?

<?PHP
if ($_REQUEST['type'] == "XML")
{
header ("Content-Type:text/xml");
}

В обозначении заголовка нет пробела. Позже я использую PHP-класс dom для формулировки XML. Это выглядит так

$dom = new DOMDocument("1.0", 'utf-8');
$root = $dom->createElement("Data");
$dom->appendChild($root);
if (!empty($Error))
{
    $Er = $dom->createElement("Errors");
    $root->appendChild($Er);
    foreach($Error as $value)
    {
        $key = "Error";
        $Child = $dom->createElement($key);
        $Child = $Er->appendChild($Child);
        $data = $dom->createTextNode($value);
        $data = $Child->appendChild($data);
    }
}
else
{
    foreach($XMLItems as $key => $value)
    {
        $key = $dom->createElement($key);
        $root->appendChild($key);
        $variable = $dom->createTextNode($value);
        $key->appendChild($variable);
    }
}
$dom->preserveWhiteSpace = FALSE;
$dom->formatOutput = TRUE;
echo $dom->saveXML();

Решение: Что я сделал, чтобы решить проблему здесь, следуя предложениям Айнбера, так это удалил все пустые строки в PHP, а также любые включения. Я удалил закрывающие PHP-теги и лишние строки в этих включениях, а также в основном файле. Это устранило две пустые строки в верхней части файла, что позволило мне вставить заголовок XML.

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

aynber 17.05.2022 14:14

@aynber Я добавил больше информации к моему вопросу выше.

RationalRabbit 17.05.2022 14:33

А причина минуса в том. . .?

RationalRabbit 17.05.2022 14:40

Вы можете, вы не можете. Дважды проверьте ответ от сервера, посмотрите, что именно он показывает в начале ответа.

aynber 17.05.2022 14:45

В начале ответа обязательно есть две пустые строки. Не уверен, откуда они берутся. Ничего не записывается между началом файла и XML-процессом. Между ними происходит значительная обработка PHP. Нет пробела перед концом строки. Пустые строки, может быть?

RationalRabbit 17.05.2022 14:55

Возможно пустые строки. Дважды проверьте наличие пустых строк или пустых/нулевых символов в верхней части файлов PHP перед <?php и в любом месте, где вы можете выйти из него.

aynber 17.05.2022 14:58

Что такое $XMLItems?

Jack Fleeting 17.05.2022 15:21

XMLItems — это массив пар ключ-значение. Это содержимое XML.

RationalRabbit 17.05.2022 16:09

Потерял время на редактирование последнего комментария. URL-адрес анализируется, результирующие переменные обрабатываются, они отправляются на мейнфрейм через API, результат обрабатывается дальше, и из результатов создается массив. Ответ возвращается в формате HTML, XML или JSON в зависимости от выбора запрашивающей стороны.

RationalRabbit 17.05.2022 16:19

Проблема в том, что невозможно воспроизвести проблему без короткой репрезентативной выборки $XMLItems.

Jack Fleeting 17.05.2022 16:21

$XMLItems = array('Variable_One'=>$VariableOne,'Variable_Two''=>$Variabl‌​eTwo,'Variable_Three‌​'=>$VariableThree.. и т. д.

RationalRabbit 17.05.2022 16:25

Это бесполезно — вы только что передвинули стойки ворот, и теперь нам нужно знать, как выглядят $VariableOne, $VariableTwo и т. д. Помните, что вам нельзя помочь, если проблема не может быть воспроизведена в чьей-либо системе. Кроме того, внесите эти изменения в сам вопрос, а не в комментарии.

Jack Fleeting 17.05.2022 16:44

@aynber - пожалуйста, опубликуйте свои предложения в качестве решения этой проблемы.

RationalRabbit 17.05.2022 17:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
13
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

"XML Parsing Error: XML or text declaration not at start of entity" означает, что где-то в начале вашего вывода XML есть пробел или другой символ, которого там быть не должно. Есть несколько мест для проверки:

  • Начало каждого файла PHP. Убедитесь, что перед <?php нет пробелов, новых строк или невидимых символов.
  • В любом месте, из которого вы выходите и обратно в блоки PHP. Все, что есть, будет отправлено в браузер, даже если это пробел.

Другие вопросы по теме