之前的笔记里面提到 可以使用 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(); } ?>