2011-08-15 14 views
1

私は私がクエリ'.//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; 
    ///////////////////////////////////////////////////////////////////// 
?> 
の内側にそれを必要とし not_important.gif画像
なしのみ green/yellow/red/black画像を取得したい、現在のノードではなく、子供には
ノードという画像のみを取得する必要があります

iは$query->item()->
を通してそれを行うことができます私はhas_attributesgetElementsByTagNameNS
getElementByIdを試してみましたが、私は失敗した::

答えて

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の場合は、2番目の引数として指定したコンテキストノードquery()。コンテキストノードは、以前の結果の要素(td)の1つです。

+0

こんにちは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

あなたは正しいですが、私はすでに私はループの中にそれを必要と言った: –

関連する問題