2014-02-18 5 views
9

로컬로 가지고있는 DTD 파일로 XML을 정리하고 있습니다.PHP로 XML DTD 유효성 검사 속도를 높이려면 어떻게해야합니까?

$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는 서버에 로컬로 있습니다.

아이디어가 있으십니까? 고맙습니다.

EDIT : 실행 시간을 디버깅하고 검사하여 내 XML에 1600 줄 또는 150 줄이있는 경우 동일한 시간이 걸리므로 문제가 XML 크기가 아닙니다.

+0

실제로 내가 dtd를 사용하고있는 곳을 볼 수 없습니까? –

+0

아, 사실, DTD는 XML 파일 자체에 설정되어 있습니다. PHP 코드에서 사용해야합니까? 어떻게? –

+0

"보시다시피 사용중인 DTD는 서버에 로컬로 있습니다." 당신의보기에서 나는 그것을 볼 수 없습니다. '$ dmsMerrin'은'file : /'URL인가요? – Joe

답변

2

1600 줄이있는 XML의 경우 약 30 초가 소요됩니다.

비정상적으로 오랜 시간이며 잘못 구성된 것 같습니다.

실행 시간을 디버깅하고 검사하여 내 XML에 1600 줄 또는 150 줄이있는 경우 동일한 시간이 걸리므로 문제가 XML 크기가 아닙니다.

더 많은 진단을 제공 할 수있는 도구의 경우 xmllint --valid을 사용해보십시오. 예를 들어, 검색 할 수없는 DTD에 대한 오류를 표시합니다.

유효성 검사를 수행하는 데 필요한 DTD와 같은 리소스를 가져 오는 것이 추가 시간 일 가능성이 큽니다.

파일 중 하나에 대해 동일한 서버의 curl과 같은 도구로 테스트하여 DTD의 URL을 빠르게 검색 할 수 있는지 확인하십시오. 복잡한 DTD입니까? 다른 파일을 가져 오나요? 특히 웹에서 가져와야하는 리소스 나 DNS가 느리게 해결되는 호스트 이름을 절대로 참조하지 않도록하십시오.