2009-08-28 12 views
6

Mam ten kod do sprawdzania poprawności pliku XML przeciwko pliku XSD:Jak uzyskać komunikat ostrzegawczy jako ciąg znaków podczas sprawdzania poprawności XML za pomocą schemaValidate() w PHP?

$file = 'test.xml'; 
$schema = 'test.xsd'; 
$dom = new DOMDocument; 
$dom->load($file); 


if ($dom->schemaValidate($schema)) { 
    print "$file is valid.\n"; 
} else { 
    print "$file is invalid.\n"; 
} 

Jeśli plik xml jest nieważny, to mówi, że jest ona nieważna. Powód jest nieprawidłowy (np. Cena nie jest liczbą całkowitą), jednak podany jest tylko w ostrzeżeniu PHP, które muszę zignorować, aby użytkownik go nie widział (z error_reporting (0)).

Jak mogę uzyskać tekst tej wiadomości i przekazać ją użytkownikowi, tak jak robiłbym to w języku C# przy próbie/haczyku?

Odpowiedz

14

Myślę, że można korzystać z funkcji obsługi błędów libxml „s dla tego jednego:

prosty przykład:

$file = 'test.xml'; 
$schema = 'test.xsd'; 
$dom = new DOMDocument; 
$dom->load($file); 

libxml_use_internal_errors(true);  
if ($dom->schemaValidate($schema)) { 
    print "$file is valid.\n"; 
} else { 
    print "$file is invalid.\n"; 
    $errors = libxml_get_errors(); 
    foreach ($errors as $error) { 
     printf('XML error "%s" [%d] (Code %d) in %s on line %d column %d' . "\n", 
      $error->message, $error->level, $error->code, $error->file, 
      $error->line, $error->column); 
    } 
    libxml_clear_errors(); 
} 
libxml_use_internal_errors(false); 
0

Jeśli potrzebujesz tylko wydrukować, możesz zdefiniować swój własny error handler, aby wydrukować błąd.

0

oto jak to zrobiłem:

$errs = [ ]; 
set_error_handler (function ($severity, $message, $file, $line) use (&$errs) { 
    $errs [] = $message; 
}); 
$validated = $domd->schemaValidate ('factinv-3-0.xsd'); 
restore_error_handler(); 

opisy błędów są teraz w błędach $, jeśli jakiekolwiek.

Powiązane problemy