簡體   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