2011-11-11 5 views
2

HTML 문자열에서 모든 일반 텍스트 노드의 배열을 검색 할 수있는 방법이 있습니까? 나는 그것이 독립적으로 '중첩'요소를 검색하고 싶은, 그래서이 같은 문자열 :모든 텍스트 노드를 구문 분석하는 PHP DOM

<p>This is a <b>nested <i>HTML</i> tag<b>...</p> 

별도의 요소로 This is a, nested, HTML, tag...로 검색 할 수있다.

$doc = new DOMDocument(); 
$doc->loadHTML($contents); 
$doc->loadHTML("<p>not in the brackets..</p>"); 
$xpath = new DOMXPath($doc); 
$textnodes = $xpath->evaluate('//text()'); 
echo '<pre>'.print_r($textnodes,1).'</pre>';die; 

이 저를주고있다 : 인터넷 검색 및 SO 검색

함께 코드의 혼란 조각 나를 이끌었다 내가 어떤 DOM 전에 개체를 사용한 적이

DOMNodeList Object 
(
) 

을 -도 있습니다 내 XPath 위대한 - 그래서 나는 물 밖으로 여기 아주 느낌! 어떤 도움을 주시면 감사하겠습니다.

+2

DOM 개체에서'print_r' 또는'var_dump'로 작업 할 수 없습니다. 그들은 내부를 드러내지 않습니다. XPath가 정확합니다. 텍스트를 출력하려면'DOMNodeList'를'foreach ($ textnodes as $ textnodes) echo $ textnode-> wholeText;'로 반복하십시오. http://codepad.viper-7.com/7lsFRG – Gordon

+0

항상 바보 같은 것들을보십시오! 고맙습니다. – Pete171

답변

0

XPath는 올바르게 평가되어야하는 DOMNodeList를 반환합니다. 다음은 태그를 기반으로 한 예입니다 :

$xpath = new DOMXpath($templateDOM); 
$xpath->registerNamespace("fcm", "http://www.w3.org/1999/xhtml"); 
$entries = $xpath->query("//img"); 

foreach($entries as $entry) { 

    $newVar = array(
      'src' => @$entry->attributes->getNamedItem('src')->nodeValue, 
      'title' => $entry->attributes->getNamedItem('title')->nodeValue, 
    ); 

    ...  

} 
관련 문제