2011-08-14 5 views
0

나에게는 어려운 것 같은 매우 중요한 질문이있다. 간단하게 현재 노드의 부모 노드에서 자식 노드를 선택해야한다 !! (..)를 사용하여 부모 노드를 선택한다는 것을 알고 있습니다.php DomXPath - 현재 노드의 부모 노드에서 자식 노드를 선택하는 방법?

... initiate/load dom+xpath ... 
$res = $xpath->query('//table/tr/td'); 
foreach($res as $td) { 
    $spans = $td->getElementsByTagName('span'); 
    $color = $spans[0]->nodeValue; 
    $imgs = $td->getELementsByTagName('img'); 
    $src = $imgs[0]->getAttribute('src'); 
} 

필요에가 없습니다 : 하지만 내 경우에 충분하지가 .. 이 내 PHP 코드는

<?php 
    ///////////////////////////////////////////////////////////////////// 
     $html=' 
      <table> 
       <tr> 
        <td colspan="2"> 
         <span>green</span> 
         <img src="green.gif" /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <span>yellow</span> 
         <img src="yellow.gif" /> 
        </td> 
        <td> 
         <span>red</span> 
         <img src="red.gif" /> 
        </td> 
       </tr> 
      </table> 
      <table> 
       <tr> 
        <td> 
         <span>black</span> 
         <img src="black.gif" /> 
        </td> 
       </tr> 
      </table> 
     '; 
    ///////////////////////////////////////////////////////////////////// 
     $dom = new DOMDocument(); 
     $dom->loadHTML($html); 
     $xpath = new DomXPath($dom); 
    ///////////////////////////////////////////////////////////////////// 
     $evaluate = $xpath->evaluate('.//table/tr/td/span'); 
     for($x=0,$results=''; $x<$evaluate->length; $x++) 
     { 
      $x1=$x+1; 

      $query1 = $xpath->query('.//table/tr/td/span'); 
      $color = $query1->item($x)->nodeValue; 
      $results .= "color $x1 is : $color<br/>"; 
     } 
     echo $results; 
    ///////////////////////////////////////////////////////////////////// 
?> 

* now i need to get for every color its images src .. 
i tried this but no way 

<?php 
    ///////////////////////////////////////////////////////////////////// 
     $html=' 
      <table> 
       <tr> 
        <td colspan="2"> 
         <span>green</span> 
         <img src="green.gif" /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <span>yellow</span> 
         <img src="yellow.gif" /> 
        </td> 
        <td> 
         <span>red</span> 
         <img src="red.gif" /> 
        </td> 
       </tr> 
      </table> 
      <table> 
       <tr> 
        <td> 
         <span>black</span> 
         <img src="black.gif" /> 
        </td> 
       </tr> 
      </table> 
     '; 
    ///////////////////////////////////////////////////////////////////// 
     $dom = new DOMDocument(); 
     $dom->loadHTML($html); 
     $xpath = new DomXPath($dom); 
    ///////////////////////////////////////////////////////////////////// 
     $evaluate = $xpath->evaluate('.//table/tr/td/span'); 
     for($x=0,$results=''; $x<$evaluate->length; $x++) 
     { 
      $x1=$x+1; 

      $query1 = $xpath->query('.//table/tr/td/span'); 
      $color = $query1->item($x)->nodeValue; 

      $query2 = $xpath->query('.//table/tr/td/span['.$x1.']/../img'); 
      $image = $query2->item($x)->getAttribute("src"); 
      $results .= "color $x1 is : $color - and- image $x1 is : $image<br/>"; 
     } 
     echo $results; 
    ///////////////////////////////////////////////////////////////////// 
?> 

도와주세요 ::

답변

4

이 시도하는 모든 색상 값을 얻을 수 있습니다 전체 xpath 조회를 두 번 실행하십시오. DOM 트리의 모든 노드는 부모와 자식을 완전히 인식합니다.

+0

Marc. 그것은 나를 위해 매우 중요한 정보입니다 .. +1 –

관련 문제