【问题标题】:How to speed up the XML DTD validation with PHP?如何使用 PHP 加速 XML DTD 验证?
【发布时间】:2014-03-18 13:23:00
【问题描述】:

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

【问题讨论】:

  • 我看不到你实际在哪里使用你的 dtd?
  • 啊,是的,其实我没用,DTD是在xml文件本身设置的。我应该在 PHP 代码中使用它吗?怎么样?
  • "如您所见,我使用的 DTD 在服务器本地。"从您的示例中我看不到这一点。 $dmsMerrinfile:/ 网址吗?

标签: php xml xml-validation dtd


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2011-09-30
    • 2016-04-01
    相关资源
    最近更新 更多