Como posso obter informações detalhadas de erro ao analisar XML enquanto mantém o DOM?

StackOverflow https://stackoverflow.com/questions/1016993

  •  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?

Foi útil?

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top