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.

🤔 А знаете ли вы, что...
PHP поддерживает многопоточность и многозадачность.


39
1

Ответ:

Решено

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

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