¿Cómo puedo obtener información de error detallada al analizar XML mientras se retiene el DOM?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Estoy creando un formulario web en el que los administradores de mi sitio pueden agregar XML a un área de texto y enviarlo para que se almacene en una tabla de base de datos, pero estoy un poco confundido sobre el mejor método para analizar el XML.

El script PHP necesita analizar el XML y, si hay algún error de análisis, debe devolver el mensaje de error y la línea / columna donde el analizador se detuvo al administrador que envió el formulario. Después de analizarlo, necesita acceder al DOM para ejecutar varias comprobaciones de la existencia de nodos y atributos utilizando XPath.

Si uso xml_create_parser () y xml_parse () , puedo obtener la información detallada del error que busco si se devuelve false. Sin embargo, no puedo acceder al DOM del XML después de analizarlo. Si uso DOMDocument :: loadXML () , por lo que he leído, no arroja excepciones para los errores de análisis, solo los envía al registro de PHP.

¿Sería un gran éxito de rendimiento si primero probara xml_parse () y luego, si tiene éxito, ejecute DOMDocument :: loadXML () , considerando que los archivos son principalmente más pequeño que 10 KB con unos pocos 10-20 KB? ¿Alguien sabe una mejor manera?

¿Fue útil?

Solución

Puede habilitar libxml_use_internal_errors y luego, si DOMDocument :: load () falló, consulte los mensajes de error detallados con 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top