[英]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.