2013-07-12 60 views
4

我怎麼能提取從HTML文件信息PHP通過DOM文檔

HTML頁提取表的特定行用DOMDocument有這部分裏面

源,這是我的第三個表頁面,我需要上工作:

<table> 
<tbody> 
<tr> 
    <td>A</td> 
    <td>B</td> 
    <td>C</td> 
    <td>D</td> 
</tr> 
<tr> 
    <td>1</td> 
    <td>2</td> 
    <td>3</td> 
    <td>4</td> 
</tr> 
</tbody> 
</table> 

如果我用問我展示與B和d行,我應該如何提取此表的第一行,並通過使用DOM文檔打印呢?

+0

你只是想在第一行?或者你想要包含「B」和「D」的行,並且它們可以位於行或特定列中的任何位置? – MrCode

+0

他們可能在第三張桌子的任何地方。這張桌子裏有大約30行。 – femchi

+0

所以你想要在第二和第四列中獲得包含「B」和「D」的行嗎?如果'B'在第一列和'D'在第二個呢? – MrCode

回答

13

這樣做,它只是抓住第三個表,循環遍歷行並在第二和第四列中檢查BD。如果找到,它會打印出每列值,然後停止循環。

$dom = new DOMDocument(); 
$dom->loadHTML(.....); 

// get the third table 
$thirdTable = $dom->getElementsByTagName('table')->item(2); 

// iterate over each row in the table 
foreach($thirdTable->getElementsByTagName('tr') as $tr) 
{ 
    $tds = $tr->getElementsByTagName('td'); // get the columns in this row 
    if($tds->length >= 4) 
    { 
     // check if B and D are found in column 2 and 4 
     if(trim($tds->item(1)->nodeValue) == 'B' && trim($tds->item(3)->nodeValue) == 'D') 
     { 
      // found B and D in the second and fourth columns 
      // echo out each column value 
      echo $tds->item(0)->nodeValue; // A 
      echo $tds->item(1)->nodeValue; // B 
      echo $tds->item(2)->nodeValue; // C 
      echo $tds->item(3)->nodeValue; // D 
      break; // don't check any further rows 
     } 
    } 
} 
+0

請查看:https://stackoverflow.com/questions/47123769/trying-to-get-td-content-using-domdocument-without-any-success –

0

這個碼是我測試的享受

$table = "<table> 
<tbody> 
<tr> 
    <td>A</td> 
    <td>B</td> 
    <td>C</td> 
    <td>D</td> 
</tr> 
<tr> 
    <td>1</td> 
    <td>2</td> 
    <td>3</td> 
    <td>4</td> 
</tr> 
</tbody> 
</table>"; 
$doc = new DOMDocument(); 
$doc->loadHTML('<?xml encoding="utf-8"?>' . $table); 
$rows =$doc->getElementsByTagName('tr'); 
$tds= $doc->getElementsByTagName('td'); 
ths= $doc->getElementsByTagName('th'); 
foreach ($ths as $th) { 
echo "<p> th = ".$th." </p>"; 
} 
foreach ($tds as $td) { 
echo "<p> td = ".$td." </p>"; 
}