Как получить предупреждающее сообщение в виде строки при проверке XML с помощью schemaValidate () в PHP? - PullRequest
7 голосов
/ 28 августа 2009

У меня есть этот код для проверки XML-файла по сравнению с XSD-файлом:

$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";
}

Если XML-файл недействителен, то он говорит, что он недействителен. Причина, по которой он недействителен (например, цена не является целым числом), однако, указывается только в предупреждении PHP, которое я должен исключить, чтобы пользователь не увидел его (с ошибкой_отчета (0)).

Как я могу получить текст этого сообщения и передать его пользователю, как я это сделал бы в C # с помощью try / catch?

Ответы [ 3 ]

16 голосов
/ 28 августа 2009

Я думаю, вы можете использовать функции обработки ошибок libxml для этой функции:

Простой пример:

$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 голосов
/ 08 декабря 2017

вот как я это сделал:

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

описания ошибок теперь в $ errs, если есть.

0 голосов
/ 28 августа 2009

Если вам нужно только распечатать, вы можете определить свой собственный обработчик ошибок для печати ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...