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

标签 php xml xml-validation dtd

我正在使用本地的 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 大小。

最佳答案

And this takes about 30sec for an XML with 1600 lines.

这段时间异常长,可能是配置错误造成的。

By debuging and checking the execution time, I noticed that it takes the same time if my xml has 1600 lines or 150 lines, so the problem is not the xml size.

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

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

对于您的其中一个文件,通过从同一台服务器使用 curl 等工具进行测试,确认可以快速检索 DTD 的 URL。它是一个复杂的 DTD 吗?它会引入其他文件吗?尤其要确保它永远不会引用必须从 Web 获取的资源,或者引用 DNS 解析缓慢的主机名。

关于php - 如何使用 PHP 加速 XML DTD 验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859720/

相关文章:

java - 使用 javax.xml.validation.Validator : cannot resolve types come from 2nd XSD 针对 XSD 进行 XML 验证

xml - 包括具有相同 XML 命名空间的 XSD?

xml - 在 XSD 中扩展复杂类型的示例?

php - 使用 sql 查询从数据库中得到不同的结果

PHP 'else return' VS 自动返回

php - 控制多个版本的PHP项目

java - 使用 SimpleXML 的 XML 声明标记

php - 在 'header.php'或 'function.php'文件中插入Bootstrap目录更好吗?

java - 使用 Spring EL 将值设置为 lambda

php - 从 php 代码创建一个 cytoscape 树