2012-11-01 48 views
0

如何在此中僅切出第一個<tr class="ismResult"><tr class="ismFixtureSummary">而不是第二組?無法使用簡單的HTML DOM來切除特定信息

我期待只剪出前兩個<tr>標籤和內容。有沒有辦法將這兩個設置爲一個變量,如$Result?我正在尋找保持html的一部分。

<table> 
    <tbody> 
     <tr class="ismResult"> 
      <td>2-0</td> 
     </tr> 

     <tr class="ismFixtureSummary"> 
      <td>Player1</td> 
      <td>Player2</td> 
     </tr> 

     <tr class="ismResult"> 
      <td>1-1</td> 
     </tr> 

     <tr class="ismFixtureSummary"> 
      <td>Player3</td> 
      <td>Player4</td> 
     </tr> 
    </tbody> 
</table> 

我已經試過:

include('simple_html_dom.php'); 
$url = 'http://www.test.com'; 
$html = file_get_html($url); 

$FullTable = $html->find('table'); 

foreach($FullTable->find('tr[class=ismResult]') as $Heading) 
    { 
    echo $Heading; 

    foreach($FullTable->find('tr[class=ismFixtureSummary]') as $Summary)  
    { 
     echo $Summary; 
    } 
    } 

這不工作,因爲它發佈所有<tr class="ismFixtureSummary">的內容到每一個<tr class="ismResult">。我試圖把它們剪成一對。

感謝您提供任何幫助。

回答

0

只需將您的查找操作的結果設置爲兩個單獨的數組,然後僅執行一個for循環並回顯您正在查找的結果。

include('simple_html_dom.php'); 
$url = 'http://www.test.com'; 
$html = file_get_html($url); 

$FullTable = $html->find('table'); 

$headings = $FullTable->find('tr[class=ismResult]'); 
$summaries = $FullTable->find('tr[class=ismFixtureSummary]'); 

for ($i = 0; $i < count($headings); $i++;) { 
    echo $headings[$i] . $summaries[$i]; 
} 
+0

謝謝,這使我得到了比我更進一步,將工作,但while循環不工作在我身邊。如果我在while循環之外迴應它的內容,但它不在其中。 – Cully

+0

我得到了它的工作..我把'$ i = 0;'放在循環內部,'$ i ++;'之前,在echo線之後。再次感謝你的幫助! – Cully

0

我想解決這個使用XPATH

$xpath = new DOMXPath($html); 

$ismResult = $xpath->query("//tr[@class='ismResult']/td"); 
$ismFixtureSummary= $xpath->query("//tr[@class='ismFixtureSummary']/td"); 

echo $ismResult->item(0)->nodeValue; 
echo $ismFixtureSummary->item(0)->nodeValue; 

你可以閱讀更多有關XPath這裏。 http://phpmaster.com/php-dom-using-xpath/

+0

Xpath看起來很有用。我遇到的唯一問題是我必須從頭再去學習一些東西。我會放棄它,但是我需要一段時間才能知道它是否適用於我。非常感謝這個建議。 – Cully