繁体   English   中英

如何使用PHP加速XML DTD验证?

[英]How to speed up the XML DTD validation with PHP?

我用我在本地的DTD文件来验证我的XML。

为此,我正在做:

$xml                = $dmsMerrin.'/xml/'.$id.'/conversion.xml';
$dtd                = $dmsMerrin.'/style_files/journalpublishing.dtd';

$dom = new DOMDocument();
@$dom->load($xml);

libxml_use_internal_errors(true);

if (@$dom->validate()) {
    $htmlDTDError .= "<h2>No Errors Found - The tested file is Valid !</h2>";
} 
else {
    $errors = libxml_get_errors();
    $htmlDTDError .= '<h2>Errors Found ('.count($errors).')</h2><ol>';

    foreach ($errors as $error) {
        $htmlDTDError .= '<li>'.$error->message.' on line '.$error->line. '</li>';
    }

    $htmlDTDError .= '</ol>';
    libxml_clear_errors();
}

libxml_use_internal_errors(false);

对于1600行的XML,这需要大约30秒。

这是平时吗? 我认为应该快得多吗?

如您所见,我使用的DTD是本地服务器上的。

任何的想法? 谢谢。

编辑:通过调试和检查执行时间,我注意到如果我的xml有1600行或150行,它需要相同的时间,所以问题不是xml大小。

对于1600行的XML,这需要大约30秒。

这是一个异常漫长的时间,可能是由于配置错误造成的。

通过调试和检查执行时间,我注意到如果我的xml有1600行或150行,则需要相同的时间,因此问题不在于xml大小。

对于可在此处提供更多诊断的工具,请尝试xmllint --valid 例如,它将显示无法检索的任何DTD的错误。

额外的时间很可能是由于获取执行验证所需的资源(例如DTD)。

对于您的某个文件,请确认可以通过使用来自同一服务器的curl工具进行快速检索,从而快速检索DTD的URL。 它是一个复杂的DTD吗? 它带来了其他文件吗? 特别是,请确保它永远不会引用必须从Web获取的资源,或者使用DNS缓慢解析的主机名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM