2011-08-15 94 views
1

我需要得到唯一的形象,在當前節點,而不是在子節點
我想只有green/yellow/red/black圖像,而不not_important.gif圖像0​​ 我可以使用查詢'.//table/tr/td/img'
但我需要它的內部循環php DomXPath - 如何獲取圖像在當前節點而不是在子節點?

<?php 
    ///////////////////////////////////////////////////////////////////// 
     $html=' 
      <table> 
       <tr> 
        <td colspan="2"> 
         <span> 
          <img src="not_important.gif" /> 
         </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> 
          <img src="not_important.gif" /> 
         </span> 
         <img src="black.gif" /> 
        </td> 
       </tr> 
      </table> 
     '; 
    ///////////////////////////////////////////////////////////////////// 
     $dom = new DOMDocument(); 
     $dom->loadHTML($html); 
     $xpath = new DomXPath($dom); 
    ///////////////////////////////////////////////////////////////////// 
     $query = $xpath->query('.//table/tr/td'); 
     for($x=0,$results=''; $x<$query->length; $x++) 
     { 
      $x1=$x+1; 

      $image = $query->item($x)->getELementsByTagName('img')->item(0)->getAttribute('src'); 

      $results .= "image $x1 is : $image<br/>"; 
     } 
     echo $results; 
    ///////////////////////////////////////////////////////////////////// 
?> 

我可以做到這一點通過$query->item()->
我想has_attributesgetElementsByTagNameNSgetElementById
但我失敗::

回答

4

替換:

$image = $query->item($x)->getELementsByTagName('img')->item(0)->getAttribute('src'); 

...有:

$td = $query->item($x); // grab the td element 
$img = $xpath->query('./img',$td)->item(0); // grab the first direct img child element 
$image = $img->getAttribute('src'); // grab the source of the image 

換句話說,再次使用XPath對象查詢,但現在爲./img,相對於您提供的上下文節點作爲第二個參數query()。上下文節點是早期結果的元素之一(td)。

+0

hi fireeyedboy,非常感謝你。這是完美的+1 ..謝謝:: –

+0

+1的解釋要求比我更好 – Phil

+0

@ al-dr:很高興聽到!快樂的編碼! :) –

1

查詢//table/tr/td/img應該可以正常工作,因爲不需要的圖像都位於<span>元素中。

你的循環會看起來像

$images = $xpath->query('//table/tr/td/img'); 
$results = ''; 
for ($i = 0; $i < $images->length; $i++) { 
    $results .= sprintf('image %d is: %s<br />', 
         $i + 1, 
         $images->item($i)->getAttribute('src')); 
} 
+0

嗨菲爾,是的,我知道但有時我需要獲取圖像src和其他節點的屬性和值,並作出一些條件。像這樣的東西..所以我需要它內循環.. –

+0

@aldr然後更新你的問題相應的一些例子,我們不介意讀者 – Phil

+0

你是對的,但我已經說過,我需要它內循環+ 1 :: –

相關問題