2017-02-26 3 views
1

XML의 테스트 비트를 가져 와서 DOMDocument를 사용하여 유효성을 검사하는 매우 간단한 구현이 있습니다. 테스트에서 LoadHTML() 호출을 제대로 수행 할 수 있지만 validate()를 실행하자마자 브라우저가 영원히 중단되어로드되지 않습니다. 여기에 코드입니다 :XML에서 DOMDocument Validate()를 사용하면 무한로드가 발생합니다.

$content = '<?xml version="1.0" encoding="utf-8"?><mainElement></mainElement>'; 

$dom = new DOMDocument; 
$dom->LoadHTML($content); 

if (!$dom->validate()) { 
    echo 'fail'; 
} else { 
    echo 'success!'; 
} 
+1

왜 XML을'loadHTML'으로 파싱하고 'loadXML'로 파싱하지 않을까요? –

답변

1

그것은 당신이 내용이 loadHTML로드 유효성을 검사 할 경우, 당신은 DOCTYPEdeclaration (그것없이, 당신은 부정사 루프를 얻을)가 필요합니다 보인다. 예를 들어, 코드를 다음과 같은 것이 작동하고 인쇄 XML를 들어 fail

$content = " 
    <!DOCTYPE html> 
    <html> 
    <body> 
    Content of the document...... 
    </body> 
    </html> 
"; 

$dom = new DOMDocument(); 
$dom->loadHTML($content); 

if (!$dom->validate()) { 
    echo 'fail'; 
} else { 
    echo 'success!'; 
} 

더 관대있어 (이 dtd를 선언하지 않았더라도 당신이 작동하지만 false를 반환). 귀하의 경우 loadXML 방법을 사용할 수 있으며 코드는 fail으로 인쇄됩니다.

php 7.0.13으로 테스트되었습니다.

+0

이것은 의미가 있으며, 나는 제안 된대로 loadXML을 사용하도록 전환했으며 이제는 '실패'합니다. 나는 이것이 왜 유효하지 않은지 궁금하다. 나는 성공을 되 찾을 것을 기대하고 있었다. – carbide20

+1

@ carbide20'dtd '를 지정하지 않았기 때문에 실패했습니다. 유효성 검사는 XML이 'dtd'를 기반으로하는지 확인하는 프로세스입니다. https://www.w3schools.com/xml/xml_dtd.asp를 확인하십시오. –

+0

이제 설명 드리며 답변 할 시간을내어 주셔서 감사합니다. – carbide20