之前的笔记里面提到 可以使用 schemaValidate 函数来验证 xsd 但是 光使用上面的函数可能显示的错误信息一大坨 不方便管理 可以使用下面几个函数管理错误信息
libxml_use_internal_errors libxml_use_internal_errors — Disable libxml errors and allow user to fetch error information as needed 不显示libxml的错误信息但是允许user 自己抓取错误信息 syntax bool libxml_use_internal_errors ([ bool $use_errors = false ] ) 默认参数是false就是会显示错误信息
我们使用的主要函数如下:
libxml_clear_errors
libxml_disable_entity_loader
libxml_get_errors
libxml_get_last_error
libxml_set_external_entity_loader
libxml_set_streams_context
libxml_use_internal_errors
然后使用 libxml_get_errors 抓取所有的错误信息 然后 libxml_clear_errors 清除所有的errors
就可以捕捉所有的错误信息 参考 http://php.net/manual/en/function.libxml-get-errors.php
下面是整个一个代码
<?php
function libxml_display_error($error)
{
$return = "<br/>\n";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "<b>Warning $error->code</b>: ";
break;
case LIBXML_ERR_ERROR:
$return .= "<b>Error $error->code</b>: ";
break;
case LIBXML_ERR_FATAL:
$return .= "<b>Fatal Error $error->code</b>: ";
break;
}
$return .= trim($error->message);
if ($error->file) {
$return .= " in <b>$error->file</b>";
}
$return .= " on line <b>$error->line</b>\n";
return $return;
}
function libxml_display_errors() {
$errors = libxml_get_errors();
var_dump($errors);exit;
foreach ($errors as $error) {
print libxml_display_error($error);
}
libxml_clear_errors();
}
// Enable user error handling
libxml_use_internal_errors(true);
$xml = new DOMDocument();
$xml->load('./demo.xml');
if ($xml->schemaValidate('./book.xsd')) {
echo "validated</n>";
}else{
libxml_display_errors();
}
?>
|
请发表评论