2012-09-11 15 views
5

Ho due file:DOMDocument :: schemaValidate() errori di avvertimento gettando

  • un file XML di esempio.
  • Un file .xsd con schema, a cui il file XML sopra indicato deve attenersi.

per convalidare il file XML rispetto allo schema, ho usato:

$dom = new DOMDocument(); 

//$this->xmlstr; is my XML file after being loaded into a string. 
$dom->loadXML($this->xmlstr); 

//$xsd_file is definitely my xsd file. 
if(!$dom->schemaValidate($xsd_file)){ 
    $errors = libxml_get_errors(); //supposed to give back errors? 
    var_dump($errors); //debugging - shows: array empty 
} 

Tuttavia, continuo a ricevere errori di avviso ogni volta che il mio doc XML non rispettare le regole dello schema.

Attenzione: DOMDocument :: schemaValidate() [domdocument.schemavalidate]: Element 'Intestazione': questo elemento non è previsto. Previsto è (Routing)

Ho intenzionalmente rovinato il mio file XML, solo per vedere come $ dom-> schemaValidate effettivamente lo gestisce. Ovviamente, non voglio che PHP sputa messaggi di avviso sulla pagina ogni volta che l'XML non soddisfa lo schema. Invece, mi piacerebbe che la mia app si occupasse di ciò. Sto trascurando qualcosa qui?

risposta

8

È necessario chiamare

libxml_use_internal_errors(true); 

prima di creare nuovo DOMDocument() al fine di eliminare gli avvisi e iniziare a raccogliere errori di analisi XML in struttura interna accessibile tramite libxml_get_errors().