我使用本地的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大小。答案 0 :(得分:2)
对于1600行的XML,这需要大约30秒。
这是一个异常漫长的时间,可能是由于配置错误。
通过调试和检查执行时间,我注意到如果我的xml有1600行或150行,则需要相同的时间,因此问题不在于xml大小。
对于可在此处提供更多诊断的工具,请尝试xmllint --valid
。例如,它将显示无法检索的任何DTD的错误。
额外的时间很可能是由于获取执行验证所需的资源(如DTD)所致。
对于您的某个文件,请确认可以通过使用来自同一服务器的curl
工具进行测试来快速检索DTD的URL。它是一个复杂的DTD吗?它带来了其他文件吗?特别是,确保它永远不会引用必须从Web获取的资源,或者使用DNS缓慢解析的主机名。