2013-10-08 44 views
3

我正在使用PHP Domdocument加載我的html。在我的HTML中,我有兩次class =「smalllist」。但是,我需要加載第一類元素。現在如何使用domdocument調用UL類一次php

,我的PHP代碼是

$d = new DOMDocument(); 
    $d->validateOnParse = true; 
    @$d->loadHTML($html); 
    $xpath = new DOMXPath($d); 
    $table = $xpath->query('//ul[@class="smalllist"]'); 
    foreach ($table as $row) { 
     echo $row->getElementsByTagName('a')->item(0)->nodeValue."-"; 
     echo $row->getElementsByTagName('a')->item(1)->nodeValue."\n"; 

    } 

它加載這兩個類。 但是,我只需要加載一個具有該名稱的類。 請幫我。提前致謝。

回答

0

這是我的最終代碼:

 $d = new DOMDocument(); 
     $d->validateOnParse = true; 
     @$d->loadHTML($html); 
     $xpath = new DOMXPath($d); 
     $table = $xpath->query('//ul[@class="smalllist"]'); 
     $count = 0; 
     foreach($table->item(0)->getElementsByTagName('a') as $anchor){ 
      $data[$k][$arr1[$count]] = $anchor->nodeValue; 
      if(++$count > 1) { 
       break; 
      } 
     } 

工作正常。

0

DOMXPath返回一個DOMNodeList它有一個item()方法。看看,如果這個工程

$table->item(0)->getElementsByTagName('a')->item(0)->nodeValue 

編輯(未經測試):

foreach($table->item(0)->getElementsByTagName('a') as $anchor){ 
    echo $anchor->nodeValue . "\n"; 
} 
+1

Gwillie,謝謝!這工作正常。現在,我正面臨一些小問題。在這裏,我再次擁有4個元素值。但是,我只需要其中的兩個,其餘兩個不是必需的。 – Gireesh

0

你可以把breakforeach環內只從第一類閱讀。或者,你可以做foreach ($table->item(0) as $row) { ...

代碼:

$count = 0; 
foreach($table->item(0)->getElementsByTagName('a') as $anchor){ 
    echo $anchor->nodeValue . "\n"; 
    if(++$count > 2) { 
     break; 
    } 
} 
+0

那不工作。意思是,它沒有給出任何結果。 – Gireesh

+0

你能顯示修改後的程序嗎? –

+1

foreach($ table-> item(0) - > getElementsByTagName('a')as $ anchor){ echo $ anchor-> nodeValue。 「\ n」 個; } – Gireesh

0

另一種方式,而不是用break(不止一種方法來皮膚貓):

$anchors = $table->item(0)->getElementsByTagName('a'); 
for($i = 0; $i < 2; $i++){ 
    echo $anchor->item($i)->nodeValue . "\n"; 
} 
+0

感謝您的幫助@gwillie :-) – Gireesh