PHP 8.6.0 Beta 1 is available for testing

Обработка ошибок в XML-документах

Ошибки при загрузке XML-документов обрабатывают функциями модуля libxml, которыми возможно подавить все XML-ошибки, а затем обработать каждую ошибку отдельно.

Объект LibXMLError , который возвращает функция libxml_get_errors() , содержит ряд свойств, в том числе сообщение, номер строки и колонку, или позицию, ошибки.

Пример #1 Загрузка XML-строки с неправильным синтаксисом

<?php
libxml_use_internal_errors(true);
$sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>");
if (!$sxe) {
 echo "Ошибка загрузки XML\n";
 foreach(libxml_get_errors() as $error) {
 echo "\t", $error->message;
 }
}
?>

Результат выполнения приведённого примера:

Ошибка загрузки XML
 Blank needed here
 parsing XML declaration: '?>' expected
 Opening and ending tag mismatch: xml line 1 and broken
 Premature end of data in tag broken line 1

Смотрите также

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 3 notes

up
21
openbip at gmail dot com
16 years ago
Note that "if (! $sxe) {" may give you a false-negative if the XML document was empty (e.g. "<root />"). In that case, $sxe will be:
object(SimpleXMLElement)#1 (0) {
}
which will evaluate to false, even though nothing technically went wrong.
Consider instead: "if ($sxe === false) {"
up
3
1337 at netapp dot com
10 years ago
If you need to process the content of your broken XML-doc you might find this interesting. It has blown past a few simple corruptions for me.
http://php.net/manual/en/class.domdocument.php#domdocument.props.recover 
up
4
tuxedobob
11 years ago
Now that the /e modifier is considered deprecated in preg_replace, you can use a negative lookahead to replace unescaped ampersands with &amp; without throwing warnings:
$str = preg_replace('/&(?!;{6})/', '&amp;', $str);
You probably should have been doing this before /e was deprecated, actually.
+Добавить

AltStyle によって変換されたページ (->オリジナル) /