2010-07-02 7 views
1

현재 정규 표현식을 사용하지 않고 개발자 추적기를 사용하고 있습니다. 특정 부분에서 HTML을 구문 분석 할 때로드 블록을 쳤습니다.PHP DOM, 특정 div 내의 텍스트 찾기

<td class="alt1" id="td_post_139718"> 
<!-- message, attachments, sig --> 
     <!-- icon and title --> 
     <div class="smallfont"> 
      <img class="inlineimg" src="images/icons/icon1.gif" alt="Default" border="0" /> 
      <strong>Re: TERA's E3 2010 Coverage</strong> 
     </div> 

내 코드 :

$titleArray = array(); 
     foreach($idArray as $id) { 
      $title = $dom->getElementById('td_post_'.$id); 
      $smallFont = $title->getElementsByTagName("div"); 
      echo $smallFont->nodeValue; 
     } 

그것은 산출 :

Notice: Undefined property: DOMNodeList::$nodeValue in C:\wamp\www\crawler\crawler.php on line 71 

Notice: Undefined property: DOMNodeList::$nodeValue in C:\wamp\www\crawler\crawler.php on line 71 

Notice: Undefined property: DOMNodeList::$nodeValue in C:\wamp\www\crawler\crawler.php on line 71 

내가 내에있는 내의 텍스트를 찾기 위해 노력하고 내가 구문 분석하려고 무엇

역동적 인 사람.

나는 모든 종류의 조합을 시도해보고 작동 시키려고했지만 그 효과를 얻을 수있었습니다.

답변

4

::getElementsByTagName은 노드 목록을 제공합니다. 개별적으로 <div>을 검색하려면이를 반복해야합니다. 예 :

foreach ($title->getElementsByTagName("div") as $smallFont)) { 
    echo htmlspecialchars($smallFont->nodeValue), "<br />; 
} 

대신 textContent 속성을 사용할 수도 있습니다. 예 : this discussion.

+1

목록에 하나의 값만 있어도 'DOMNodeList'를 반환한다는 점에 유의하십시오. 노드 목록을 배열로 취급하거나'item' 메쏘드를 사용할 수 있습니다 :'echo $ smallFont-> item (0) -> nodeValue' – Charles

+0

이 방법은 메시지에서 그것을 분리하기 위해 몇 가지 반복을 추가 한 후에 작동합니다 이 코드 아래의 데이터. cURL 정규 표현식을 사용하거나 DOM 반복을 2 회 반복하는 것이 더 효율적이라고 생각합니까? – Honzo

+1

정규 표현식이 HTML에서 올바르게 작동하기에 충분한 정교함을 가지지 않으므로 DOM을 사용하는 것이 ** 정확합니다 **. – Artefacto