【问题标题】:Get data inside html tags using Simple HTML DOM Parser:使用 Simple HTML DOM Parser 获取 html 标签内的数据:
【发布时间】:2013-09-01 20:27:19
【问题描述】:

我想获取 html 标签内的所有信息并将它们显示在表格中。我正在使用简单的 HTML DOM 解析器。我尝试了以下代码,但我只得到最后一列(列:总计)。如何从其他列中获取数据?

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>

【问题讨论】:

    标签: php html-table html-parsing simple-html-dom


    【解决方案1】:

    为什么你有$div-&gt;find('*')?你可以试试$div-&gt;find('td')。这应该会产生正确的结果。否则你也可以尝试迭代孩子:foreach($div-&gt;children as $node)

    假设您尝试将第一行用作 $key 并将其余行用作数据,您可能想要更改 HTML 代码,只需在第一行添加 th,即您的标题:&lt;tr&gt;&lt;th&gt;…&lt;/th&gt;&lt;/tr&gt;。这样您就可以通过$div-&gt;find('th') 获取密钥。我想使用第一行也可以。

    【讨论】:

      【解决方案2】:

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

      这是上面代码的输出:

      你必须知道这两行不包含相同数量的列......然后你必须在你的程序中处理它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        • 2012-04-08
        • 1970-01-01
        相关资源
        最近更新 更多