SimpleXML кидаючи попередження - як спіймати?

Я маю певні труднощі, визначаючи, що відбувається за допомогою simplexml_load_string() . Я використовую код нижче, щоб відобразити деякий XML. Коли я запускаю цей код, я отримую повідомлення про помилку:

Message: simplexml_load_string() [function.simplexml-load-string]: Entity: line 94: parser error : Opening and ending tag mismatch: meta line 15 and head

Будь-які ідеї щодо того, як я можу спіймати ці попередження? libxml_get_errors не впливає.

                $response = simplexml_load_string($response);
                var_dump($response);
                if (count(libxml_get_errors()) > 0) {
                    print_r(libxml_get_errors());
                }

                if (is_object($response)) { //returns true when warnings are thrown
                    //process response
                } else {
                    //record error
                }
0
Ви завантажуєте недійсний файл .xml. Може бути, делегувати проблему хлопцю, який це забезпечує?
додано Автор FailedDev, джерело

2 Відповіді

libxml_use_internal_errors(true);//!!!

$elem = simplexml_load_string($xml);
if($elem !== false)
{
   //Process xml structure here
}
else
{
    foreach(libxml_get_errors() as $error)
    {
        error_log('Error parsing xml file ' . $file . ': ' . $error->message);
    }
}
11
додано
Обробка помилок ще гірша. Попередження дає більш конкретні повідомлення про неправильну частину джерела XML, ніж обробка помилок. Останні лише показують колонку, рядок, де важко знайти частину помилки, якщо файл вихідного коду xml не закодований у форматі свердловини.
додано Автор Scott Chu, джерело
Ця відповідь не заважає попередженням, він просто відображає більше інформації про помилки. Щоб запобігти попередженням, використовуйте set_error_handler() , як у цьому відповіді: stackoverflow.com/a/17012247/204842
додано Автор Russell G, джерело

У моїй ситуації сервер, який використовував XML, змінив їх http на https. Через це ми завантажили старий шлях XML-файл, який у цьому випадку був "пошкоджений". Ось чому у нас була помилка.

Файли xml завантажувались чудово, тому що я не помітив проблему https (перенаправлення браузера).

0
додано
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php