level) { case LIBXML_ERR_WARNING: $res = 'Warning'; break; case LIBXML_ERR_ERROR: $res = 'Error'; break; case LIBXML_ERR_FATAL: $res = 'Fatal error'; break; default: $res = 'Unknown error'; } $res .= ' '.$error->code; $res .= ' L='.$error->line.' C='.$error->column; $res .= ' '.trim($error->message); return $res; } function lib_xml_collect_errors($level_limit) { $res = NULL; $errors = libxml_get_errors(); foreach ($errors as $error) { $msg = NULL; switch ($error->level) { case LIBXML_ERR_WARNING: if ($level_limit !== LIBXML_ERR_FATAL && $level_limit !== LIBXML_ERR_ERROR) { $msg = lib_xml_error_to_str($error); } break; case LIBXML_ERR_ERROR: if ($level_limit !== LIBXML_ERR_FATAL) { $msg = lib_xml_error_to_str($error); } break; case LIBXML_ERR_FATAL: $msg = lib_xml_error_to_str($error); break; default: # Do not unknown levels. } if ($msg !== NULL) { if ($res !== NULL) { $res .= ' ; '; } $res .= $msg; } } return $res; } function lib_xml_parse($str) { $dom = new DOMDocument('1.0'); $dom->resolveExternals = TRUE; $dom->substituteEntities = TRUE; libxml_clear_errors(); $dom->loadXML($str); $err_msg = lib_xml_collect_errors(LIBXML_ERR_ERROR); return $err_msg === NULL ? $dom : $err_msg; } ?>