2011-08-28 6 views
5

Tengo una función rápida para cargar una cadena XML y validarla contra un esquema. Cuando se le da un XML bien formado, se comporta perfectamente.La validación de PHP XML arroja excepciones fatales cuando pasaba mal XML

Sin embargo, cuando elimino la sintaxis xml, php arroja un error fatal y mata la secuencia de comandos. Estoy comprobando el valor de retorno de la función loadXML, y quiero un verdadero verdadero/falso. Si el xml está sucio, loadXML() fallará y simplemente puedo devolver el error de validación. Intenté configurar un manejador de errores vacío, pero aún mata el script.

¿Alguna idea? ¿Debo degradar los errores o algo así?

código incluido para referencia (PHP):

function __maskerrors(){}; 

function ValidateImageXML($xml_string) 
{ 
    /* Parse XML data string into DOM object */ 
    $xdoc = new DomDocument; 

    /* Calculate schema location */ 
    $schema = dirname(realpath(__FILE__)); 
    $schema.= "/image-xml-schema.xsd"; 

    /* Mask any errors */ 
    set_error_handler('__maskerrors'); 

    /* Parse xml string, check for success */ 
    if($xdoc->loadXML($xml_string)) 
    { 
     /* Validate xml against schema */ 
     if($xdoc->schemaValidate($schema)) 
     { 
      /* Valid XML structure & valid against schema, return true */ 
      return true; 
     } 
     else 
     { 
      /* Valid XML structure, but invalid against schema. Return false */ 
      return false; 
     } 
    } 
    else 
    { 
     /* Invalid XML structure, return false */ 
     return false; 
    } 

    /* Stop masking errors */ 
    restore_error_handler(); 
} 
+0

¿Cuál es el mensaje del error fatal? – hakre

Respuesta

4

intento con

libxml_use_internal_errors(true); 
$xdoc->loadXml($yourXml); 
libxml_clear_errors(); 
return $xdoc->schemaValidate($schema) 

Esto desactivará errores libxml y permitir a los usuarios para ir a buscar la información de error, según sea necesario (o eliminarlas)

Ver http://.php.net/manual/en/book.libxml.php

+0

Funciona perfecto, gracias – Oliver