5.【xml schema 】php 验证xsd函数

之前的笔记里面提到 可以使用 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/>
"; 
	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>
"; 

	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(); 
}


?>
慢慢沉淀自己
原文地址:https://www.cnblogs.com/martinding/p/7478953.html