Я извлекаю xml-файлы с сервера, а иногда получаю недопустимые файлы xml, из-за этого я получаю предупреждение:
Warning: DOMDocument::load() [domdocument.load]: Start tag expected, '<' not found in
Как я могу поймать это предупреждение и удалить файл?
У вас есть два варианта. Либо используйте оператор управления ошибкой @
в вызове load()
, например, @$dom->load()
, что несколько медленнее, потому что оно глобально изменяет значение display_errors на off, выполняет функцию и устанавливает ее обратно.
Другой вариант, который я лично предпочитаю (я ненавижу оператора @
, я не могу его видеть в своем коде) заключается в том, чтобы сохранить старое значение libxml_use_internal_errors , включить его с помощью libxml_use_internal_errors(TRUE)
, вызвать функцию, очистить буфера ошибок и восстановить старое значение. Вот фрагмент моего кода, который делает это:
<?php $previous_value = libxml_use_internal_errors(TRUE); $doc->loadHTML((string)$e->response->getBody()); libxml_clear_errors(); libxml_use_internal_errors($previous_value);
Я еще не могу комментировать ответы, поэтому напишу здесь:
nadav @ shesek: ~ $ php -r '$ dom = новый DOMDocument; $ dom-> strictErrorChecking = FALSE; $ Dom-> loadHTML ( "<х> </ ге>");» PHP Предупреждение: DOMDocument :: loadHTML (): тег xy недействителен в Entity, строка: 1 в поле командной строки в строке 1
Используйте set_error_handler
.
set_error_handler("yourHandler", E_WARNING);
Отключите строгую проверку ошибок:
$dom = new DOMDocument(); $dom->strictErrorChecking = FALSE ; $dom->load('/path/to/file.xml'); if (!$dom->validate()) { // Invalid XML! }