簡體   English   中英

使用簡單HTML DOM解析器在html標記內獲取數據:

[英]Get data inside html tags using Simple HTML DOM Parser:

我想獲取html標記內的所有信息,並將它們顯示在表格中。 我正在使用簡單HTML DOM解析器。 我嘗試了以下代碼,但是我只得到了最后一列(Column:Total)。 如何從其他列中獲取數據?

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>

為什么會有$div->find('*') 您可以嘗試$div->find('td')代替。 這應該產生正確的結果。 否則,您也可以嘗試遍歷子代: foreach($div->children as $node)

假設您嘗試將第一行用作$ key,其余的用作數據,則可能要更改您的HTML代碼,只需在第一行中添加th ,即標題: <tr><th>…</th></tr> 這樣,您可以通過$div->find('th')獲得密鑰。 我想也可以使用第一行。

正如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 /!\ ";

這是上面代碼的輸出:

在此處輸入圖片說明

您必須知道兩行不包含相同數量的列...然后,您必須在程序中進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM