【问题标题】:PHP Simple HTML DOM Parser how to get TR only from first tablePHP Simple HTML DOM Parser 如何仅从第一个表中获取 TR
【发布时间】:2014-10-26 08:08:49
【问题描述】:

我有类似以下结构的 HTML 代码,如何在 PHP 中使用 PHP 简单 HTML DOM 查找方法仅从第一个表中获取 TR。

    <table width="100%" cellspacing="0" cellpadding="0" border="0" class="convertedTable">
      <tbody>
       <tr>
         <td>
           <table width="100%" cellspacing="0" cellpadding="0" border="0">
            <tbody>
              <tr>
               <td>...</td>
               </tr>
             </tbody>
            </table>
           </td>
          </tr>
<tr>
         <td>Some text</td>
          </tr>
<tr>...</tr>
....
         </tbody>
        </table>

我尝试了这些条件,但不起作用。

`

$file->find('/body/table/tr')
$file->find('/body/table[!class]/tr')
$file->find('body table tr')

感谢您的建议。

【问题讨论】:

  • 通过 php 找到第一个 tr?还是css?
  • 你能分享你已经尝试过的代码吗?
  • 仅供参考,SimpleHTMLDom 是一个糟糕的库
  • @l'L'l 看过代码?它也不是基于 libxml 的,并且有一些令人讨厌的内存问题。标准 DOM 扩展拥有您需要的一切,并且编写和记录良好。这是 XML / HTML 解析器的好资源~stackoverflow.com/a/3577662/283366
  • @Phil,实际上,不,我没有——总是使用标准的;不过很高兴知道。

标签: php html simple-html-dom


【解决方案1】:

您可以尝试以下简单的方法:

foreach($html->find('tr') as $tr) {
    // do something with $tr
    break; // stop now
}

或者这样指定:

$tr = $html->find('tr', 0); // zero based index selector

【讨论】:

    【解决方案2】:

    应该只需几行代码就可以轻松做到这一点:

    $table = $html->find('table', 0);
    foreach($table->find('table') as $tb) {
    foreach($tb->find('tr') as $tr) {
            echo $tr;
        }
    }
    

    结果:

    <tr>
     <td>...</td>
    </tr>
    

    【讨论】:

    • 是的,这仅适用于第一个 TABLE 中的一个 TR,但如果我在第一个 TABLE 中有更多 TR,它就不起作用:-(
    • 现在我试了一下,还是不行。处理了第一个和嵌套表中的所有 TR :-(
    • 所以你试图只在第一个表中获取&lt;tr&gt; 项,而没有任何嵌套表,对吗? ——我想这就是你的意思。无论如何,它现在应该可以这样工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    相关资源
    最近更新 更多