2011-09-15 6 views
1

일부 XML 텍스트를 구문 분석하는 PHP 페이지가 있습니다. 이 텍스트는 html 텍스트 필드의 사용자 입력에서옵니다.PHP DomDocument xml 파서

노드 사이에 공백이있을 때마다 Domdocument xml 파서가 문서를 올바르게 구문 분석하지 못합니다. 기본적으로 첫 번째 노드를 인식하지만 찾을 수없는 중첩 노드는 인식합니다.

공백을 제거해도 문제가 없습니다.

$xmldoc = new DOMDocument(); 
$xmldoc->loadXML($rawxml); 

$top = $xmldoc->documentElement; 
if(!$top) {echo "error: xml config is empty"; exit(-1);} 
if($top->nodeName != "config") die("error: expect config tag as first element"); 


$nameNode = $top->childNodes->item(0); 

//Fails here 
if($nameNode->nodeName != "name") die("error: expect name tag following config tag"); 

작품

<config><name>sdf2</name></config> 

이것은 예상되는 동작

<config> <name>sdf2</name></config> 
+0

를 참조 $ rawxml); – user623879

+0

@ user623879 잘못되었습니다. http://stackoverflow.com/questions/3577641/best-methods-to-parse-html-with-php을 읽어보십시오. –

답변

0

작동하지 않습니다. DOM을 사용하여 형식이 지정된 XML 문서를로드 할 때 공백이 생깁니다. 들여 쓰기, 줄 바꿈 및 노드 값은 기본적으로 DOMText 인스턴스로 DOM의 일부가됩니다. 형식을 지정하는 공백을 삭제할 XML을로드하기 전에

$xmldoc->preserveWhiteSpace = false; 

을 수행하여 사용 중지 할 수 있습니다. 더 자세한 답변을 위해 나는 해요 dumb..coulda 사용 정규식 ..... $ rawxml = preg_replace이다 ("/> \ S +<"