Como posso obter informações detalhadas de erro ao analisar XML enquanto mantém o DOM?
-
06-07-2019 - |
Pergunta
Estou construindo um formulário na Web no qual os administradores do meu site podem adicionar XML a uma textarea e enviá -lo para ser armazenado em uma tabela de banco de dados, mas estou um pouco confuso quanto ao melhor método de análise do XML.
O script PHP precisa analisar o XML e, se houver erros de análise, ele deve retornar a mensagem de erro e a linha/coluna em que o analisador parou para o administrador que enviou o formulário. Depois de analisá -lo, ele precisa acessar o DOM para executar várias verificações para a existência de nós e atributos usando o XPath.
Se eu usar xml_create_parser()
e xml_parse()
, Posso obter as informações detalhadas de erro que estou depois se false for retornado. No entanto, não posso acessar o DOM do XML depois de analisá -lo. Se eu usar DOMDocument::loadXML()
, pelo que li, ele não joga exceções para erros de análise, apenas os produz para o log PHP.
Seria um ótimo sucesso de desempenho se eu tentei pela primeira vez xml_parse()
E então, se for bem -sucedido, corra DOMDocument::loadXML()
, considerando que os arquivos são principalmente menores que 10kb, sendo alguns de 10 a 20kb? Alguém conhece uma maneira melhor?
Solução
Você pode ativar libxml_use_internal_errors e então -Se DomDocument :: load () falhou - consulte as mensagens de erro detalhadas com libxml_get_errors ()
<?php
$xml = '<a>
<b>xyz</b>
<c>
</a>';
libxml_use_internal_errors(true);
$doc = new DOMDocument;
if ( !$doc->loadxml($xml) ) {
$errors = libxml_get_errors();
var_dump($errors);
}