Ожидается начальный тег ответа PHP XML, но я вижу его в var_dump

У меня есть следующее возвращается

var_dump:

string(799) "<?xml version="1.0" encoding="ISO-8859-1"?> <serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service" xmlns:com="http://www.webex.com/schemas/2002/06/common" xmlns:att="http://www.webex.com/schemas/2002/06/service/attendee"><serv:header><serv:response><serv:result>SUCCESS</serv:result><serv:gsbStatus>BACKUP</serv:gsbStatus></serv:response></serv:header><serv:body><serv:bodyContent xsi:type="att:registerMeetingAttendeeResponse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><att:register><att:attendeeID>29281003</att:attendeeID></att:register></serv:bodyContent></serv:body></serv:message>"

я пытаюсь использовать SimpleXML, но я сначала проверяю вывод с помощью этой функции (извините, не могу вспомнить, где я нашел его в stackoverflow):

function isXML($xml){
libxml_use_internal_errors(true);

$doc = new DOMDocument('1.0', 'utf-8');
$doc->loadXML($xml);

$errors = libxml_get_errors();

if(empty($errors)){
return true;
}

$error = $errors[0];
if($error->level < 3){
return true;
}

$explodedxml = explode("r", $xml);
$badxml = $explodedxml[($error->line)-1];

$message = $error->message . ' at line ' . $error->line . '. Bad XML: ' . htmlentities($badxml);
return $message;
}

результат isXML ()

Start tag expected, '<' not found at line 1. Bad XML: &lt;?xml ve

Я вижу<‘, если var_dump неточен. Я сломал эту штуку столько, сколько мог. Любая помощь будет принята с благодарностью.

1

Решение

Я решил проблему немного подробнее:

$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>
<serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service"/>';

// escape xml special chars - this will provoke the error
$xml = htmlspecialchars($xml);

$document = new DOMDocument();
$document->loadXml($xml);

Выход:

Warning: DOMDocument::loadXML(): Start tag expected, '<' not found in Entity, line: 1 in /tmp/...

Что происходит, когда ваш XML все еще экранируется / кодируется. Вы не видите этого в браузере, потому что специальные символы интерпретируются им. Относится к ответу (включая var_dump()) как HTML. Откройте исходный вид, чтобы проверить фактическое значение.

Отладка источника, который читает строку XML, вы можете изменить его или добавить html_entity_decode() там.

ПОДСКАЗКА: Ваш XML использует пространства имен, поэтому вам лучше использовать DOM + Xpath. Проверять, выписываться DOMXPath :: оценить ().

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]