gpt4 book ai didi

php - 带有 OOP 的 libxml 错误处理程序

转载 作者:可可西里 更新时间:2023-11-01 00:06:26 24 4
gpt4 key购买 nike

我需要捕获 libxml 错误。但是我想为此使用我的类(class)。我知道 libxml_get_errors 和其他函数。但我需要像 libxml_set_erroc_class("myclass") 这样的东西,在所有错误情况下都会调用我的类。我不想在每种情况下使用 $dom->load(...) 创建一些像 foreach(libxml_get_errors as $error) {....} 这样的结构>。你能帮帮我吗?

最佳答案

libxml错误主要是在读写xml文档时产生的,因为已经进行了自动验证。

所以这是你应该集中精力的地方,你不需要覆盖 set_error_handler .. 这是一个概念证明

使用内部错误

libxml_use_internal_errors ( true );

示例 XML

$xmlstr = <<< XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<titles>PHP: Behind the Parser</title>
</movie>
</movies>
XML;

echo "<pre>" ;

我想这是你想要实现的那种的例子

try {
$loader = new XmlLoader ( $xmlstr );
} catch ( XmlException $e ) {
echo $e->getMessage();
}

XMLLoader 类

class XmlLoader {
private $xml;
private $doc;
function __construct($xmlstr) {
$doc = simplexml_load_string ( $xmlstr );

if (! $doc) {
throw new XmlException ( libxml_get_errors () );
}
}
}

XmlException 类

class XmlException extends Exception {

private $errorMessage = "";
function __construct(Array $errors) {

$x = 0;
foreach ( $errors as $error ) {
if ($error instanceof LibXMLError) {
$this->parseError ( $error );
$x ++;
}
}
if ($x > 0) {
parent::__construct ( $this->errorMessage );
} else {
parent::__construct ( "Unknown Error XmlException" );
}
}

function parseError(LibXMLError $error) {
switch ($error->level) {
case LIBXML_ERR_WARNING :
$this->errorMessage .= "Warning $error->code: ";
break;
case LIBXML_ERR_ERROR :
$this->errorMessage .= "Error $error->code: ";
break;
case LIBXML_ERR_FATAL :
$this->errorMessage .= "Fatal Error $error->code: ";
break;
}

$this->errorMessage .= trim ( $error->message ) . "\n Line: $error->line" . "\n Column: $error->column";

if ($error->file) {
$this->errorMessage .= "\n File: $error->file";
}
}

}

样本输出

Fatal Error 76: Opening and ending tag mismatch: titles line 4 and title
Line: 4
Column: 46

希望对你有帮助

谢谢

关于php - 带有 OOP 的 libxml 错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10025247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com