【问题标题】:parsing html table tr tag missing解析html表tr标签丢失
【发布时间】:2016-05-30 23:16:29
【问题描述】:

我需要使用 php 解析 html 表。但是在第一条记录之后,最后几条记录没有开始<tr>标签。下面是代码:

<tr class="odd">
    <td class="dragHandle"></td>
    <td class="checkbox"></td>
    <td>4228651391</td>
    <td>Payment</td>
    <td>01850147130</td>
    <td>01670808080</td>
    <td>10</td>
    <td>lcghs786</td>
    <td>1</td>
    <td>18-feb-16 21:37:52</td>
</tr>
    <td class="dragHandle"></td>
    <td class="checkbox"></td>
    <td>4226429613</td>
    <td>Payment</td>
    <td>01957814120</td>
    <td>01670808080</td>
    <td>5</td>
    <td>aims777</td>
    <td>1</td>
    <td>18-feb-16 17:44:12</td>
</tr>
    <td class="dragHandle"></td>
    <td class="checkbox"></td>
    <td>4226292073</td>
    <td>Payment</td>
    <td>01957814120</td>
    <td>01670808080</td>
    <td>10</td>
    <td>AIMS786</td>
    <td>1</td>
    <td>18-feb-16 17:28:02</td>
</tr>

我尝试使用 simple_html_dom 库,但它只返回 array 作为第一条记录。请帮助我如何解析所有记录并输入array。 谢谢

【问题讨论】:

  • 如果您尝试解析损坏的 HTML,您将遇到麻烦... :|
  • 在尝试解析 HTML 之前,是否有 任何 方法使 HTML 有效?你在哪里得到无效的 HTML?如果 DOM 解析器因为无效而无法理解它,那么您可能需要手动解析字符串。也许将其分解为'&lt;/tr&gt;' 上的字符串数组并尝试单独解析每个段?

标签: php html parsing dom


【解决方案1】:

首先,您需要通过此库将缺少的 tr 填充到您的 html 中。

http://htmlpurifier.org/

然后使用下面的代码

$content = str_get_html(your html);
$tr_array = $content->find('tr');
foreach($tr_array as $tr) {
   //process your tr data
};

【讨论】:

  • 任何建议如何在我的 html 中添加缺少的 然后解析。解析没问题,但我需要一个简单的方法来修复丢失的标签
  • 在htmlpurifier文档中:require_once '/path/to/HTMLPurifier.auto.php';$config = HTMLPurifier_Config::createDefault();$purifier = new HTMLPurifier($config);$clean_html = $purifier-&gt;purify($dirty_html);
  • 使用库来轻松修复它
  • 我试过图书馆。这也最终只返回一个记录。 :(
【解决方案2】:

我终于可以解决问题了。感谢@Kelvin 的提示

我已经获取了错误的静态 html 页面 [output.html] 并将其提供给名为 'tidy' 的 html 修复应用程序。为了将数据解析为 PHP“数组”,我在 phpclasses.org 中使用了 Wojtek Jarzecki 的 table2arr 库。

更正的工作代码如下。


require_once 'table2arr.php';

$string=file_get_contents('output.html');

shell_exec("tidy.exe output.html > test.html");

$clean_html=file_get_contents('test.html');

$g= new table2arr($clean_html);

$cnt=$g->tablecount;

for($i=0;$i

$g->getcells($i);

var_dump($g->cells); }

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签