2013-08-29 1 views
1

Я хочу получить всю информацию в тегах html и отобразить их в таблице. Я использую простой HTML DOM Parser. Я попробовал следующий код, но я получаю только LAST COLUMN (Column: Total). Как получить данные из других столбцов?Получить данные внутри тегов html с помощью простого HTML DOM Parser:

foreach($html->find('tr[class="tblRowShade"]') as $div) { 
    $key = ''; 
    $val = ''; 

    foreach($div->find('*') as $node) { 
     if ($node->tag=='td'){ 
      $key = $node->plaintext; 
     } 
    } 

    $ret[$key] = $val; 
} 

Вот мой код для таблицы

<tr class="tblRowShade"> 
     <td width="12%"><strong>Project</strong></td> 
     <td width="38%">&nbsp;</td> 
     <td width="25%"><strong>Recipient</strong></td> 
     <td width="14%"><strong>Municipality/City</strong></td> 
     <td width="11%" nowrap="nowrap" class="td_right"><strong>Implementing Unit</strong></td> 
     <td width="11%" nowrap="nowrap" class="td_right"><strong>Release Date</strong></td> 
     <td align="right" width="11%" class="td_right"><strong>Total</strong></td> 
</tr> 

<tr class="tblRowShade"> 
     <td colspan="2" >Livelihood Programs</td> 
     <td >Basic Espresso and Latte</td> 
     <td nowrap="nowrap"></td> 
     <td >DOLE - TESDA Regional Office IV-A</td> 
     <td nowrap="nowrap">2013-06-11</td> 
     <td align="right" nowrap="nowrap" class="td_right">1,500,000</td> 
</tr> 

ответ

0

Почему у вас есть $div->find('*')? вы можете попробовать вместо этого $div->find('td'). Это должно привести к правильному результату. В противном случае вы также можете попробовать перебрать детей: foreach($div->children as $node)

Предполагая, что вы пытаетесь использовать первую строку как $ key, а остальные для данных, вы можете изменить свой код HTML, просто добавив th в первую строку , который является вашим заголовком: <tr><th>…</th></tr>. Таким образом, вы можете получить ключи от $div->find('th'). Я полагаю, что использование первой строки тоже хорошо.

0

Как alamin.ahmed сказал, что было бы лучше искать td вместо ...

Вот рабочий пример:

$text = ' <tr class="tblRowShade"> 
     <td width="12%"><strong>Project</strong></td> 
     <td width="38%">&nbsp;</td> 
     <td width="25%"><strong>Recipient</strong></td> 
     <td width="14%"><strong>Municipality/City</strong></td> 
     <td width="11%" nowrap="nowrap" class="td_right"><strong>Implementing Unit</strong></td> 
     <td width="11%" nowrap="nowrap" class="td_right"><strong>Release Date</strong></td> 
     <td align="right" width="11%" class="td_right"><strong>Total</strong></td> 
</tr> 

<tr class="tblRowShade"> 
     <td colspan="2" >Livelihood Programs</td> 
     <td >Basic Espresso and Latte</td> 
     <td nowrap="nowrap"></td> 
     <td >DOLE - TESDA Regional Office IV-A</td> 
     <td nowrap="nowrap">2013-06-11</td> 
     <td align="right" nowrap="nowrap" class="td_right">1,500,000</td> 
</tr>'; 

echo "<div>Original Text: <xmp>$text</xmp></div>"; 


//Create a DOM object 
$html = new simple_html_dom(); 
// Load HTML from a string 
$html->load($text); 


// Find all elements 
$rows = $html->find('tr[class="tblRowShade"]'); 


// Find succeeded 
if ($rows) { 

    echo count($rows) . " \$rows found !<br />"; 

    foreach ($rows as $key => $row) { 

     echo "<hr />"; 

     $columns = $row->find('td'); 

     // Find succeeded 
     if ($rows) { 

      echo count($columns) . " \$columns found in \$rows[$key]!<br />"; 

      foreach ($columns as $col) { 

        echo $col->plaintext . " | "; 
       } 
     } 
     else 
      echo " /!\ Find() \$columns failed /!\ "; 
    } 
} 
else 
    echo " /!\ Find() \$rows failed /!\ "; 

вот выход кода выше:

enter image description here

Вы должны знать, что две строки не содержат одинаковое количество столбцов ... тогда вы должны обрабатывать это в y нашей программы.

Смежные вопросы