Erros DOM
Durante a análise sintática, documentos com problemas podem retornar possíveis problemas relatados pela libXML como Inphinit\Dom\DomException.
Defina os níveis de gravidade.
FATAL
use Inphinit\Dom\Document;
Document::setSeverityLevels(Document::FATAL);
Um documento mal formatado retornará um erro fatal Inphinit\Dom\DomException. Isso também inclui erros de falta de memória (OOM), erros de entrada/saída (I/O), esgotamento de limites de recursos, erros inesperados de outras bibliotecas e erros de argumentos inválidos.
AVISO
use Inphinit\Dom\Document;
Document::setSeverityLevels(Document::WARNING);
ERRO
use Inphinit\Dom\Document;
Document::setSeverityLevels(Document::ERROR);
Isso gerará erros recuperáveis como um Inphinit\Dom\DomException, por exemplo:
- Erros de namespace.
- Erros de validade durante a validação.
- Determinadas entidades não declaradas.
- Identificação única e
xml:iderros.
Denuncie tudo
Lançar uma exceção para avisos, erros e erros fatais que possam ocorrer durante a análise sintática:
use Inphinit\Dom\Document;
Document::setSeverityLevels(Document::ERROR | Document::FATAL | Document::WARNING);
Erro de análise
Documentos com problemas, de acordo com o grau de generalidade definido, gerarão erros caso sejam encontrados problemas no documento. Para documentos locais, a exceção apontará para a linha exata que apresenta o problema, por exemplo:
use Inphinit\Dom\Document;
// parse XML
$handle = new Document(Document::XML);
$handle->load('/foo/bar/sample.xml', true);
sample.xml:
<?xml version="1.0" encoding="UTF-8"?>
<contact>
<sample>test</sample>
<foo:name>Foo bar baz</foo:name>
<baz:phone>(000) 0000-xxxx</baz:phone>
</contact>
Saída:
Fatal error: Uncaught Inphinit/Dom/DomException: Namespace prefix foo on name is not defined in /foo/bar/sample.xml:4
Stack trace:
#0 /home/application/system/vendor/inphinit/framework/src/Inphinit/Dom/Document.php(214): Inphinit/Dom/Document->raise(3)
#1 /home/application/system/dev.php(482): Inphinit/Dom/Document->load('/foo/bar/sample.xm...', true)
#2 /home/application/system/vendor/inphinit/framework/src/Inphinit/App.php(223): {closure:{closure:/home/application/system/dev.php:358}:478}(Object(Inphinit/Diagnostics/App), NULL)
#3 /home/application/index.php(8): Inphinit/App->exec()
#4 {main}
thrown in /foo/bar/sample.xml on line 4
Se você estiver no modo de desenvolvimento e tiver adicionado $debug->setErrorView('debug.error');, uma tela semelhante será exibida: