在PHP中解析HTML:得到table的onclick属性值

Parsing HTML in PHP: get table onclick attribute value

我想解析 HTML 页面以从 table 获取数据(基本上我想遍历所有 tr 标签)。

我有下一个问题:

  1. 如何跳过 table 头中的 tr
  2. 如何获取td标签的onclick属性值?
  3. 如何在每个 tr
  4. 中计算 td

HTML结构:

<tr>
  <td onclick="window.location='home.php?navi=148';">kkkk</td>
  <td>demo</td>
  <td>kkkk</td>
</tr>

我想得到window.location='home.php?navi=148'; 我使用的代码:

$url = $html;
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);

$dom = new DOMDocument();
@$dom->loadHTML($html);

# Iterate over all the <a> tags
foreach($dom->getElementsByTagName('td') as $link) {
    # Show the <a href>
    print_r($link);
    echo "<br />";
}

您尝试获取节点值了吗?

   foreach($dom->getElementsByTagName('td') as $link) {
    # Show the <a href>

    echo $link->nodeValue; //td value inside
    echo "<br />";

}

而不是使用 php 你为什么不使用 javascript 来实现你想要的..

执行此操作的代码如下:

$('#tableId tr').each(function(){
    defaultData[i] = new Array();
    j = 0;
    $(this).find('td').each(function(){
        defaultData[i][j] = $(this).html();
        if (defaultData[i][j].length > 150)
        {                
            defaultData[i][j] = $(this).find('select').val();
        }
        j++;
    });
    i++;
});

您已经在使用 DOM 扩展,但您错过了 DOMXPath。它允许您使用 XPath 表达式来获取文档的一部分。它可以 return 节点列表或标量。

基本语法

$xpath = new DOMXPath($dom);
$result = $xpath->evaluate($expression, $optionalContext);

如何在 table 头部跳过 tr?

这是可能的,但大多数时候更容易进行正匹配(所有 tr 都在 tbody 内)。想想脚内的 tr。

tbody 内的所有 tr://table/tbody/tr
所有tr直接在table://table/tr
父项不是 thead 的所有 tr //table//tr[name(parent::*) != 'thead']

如何获取td标签的onclick属性值?

这是一个标量值 - 因此您需要将其转换为字符串:

string(//table/tbody/tr/td/@onclick)

如何计算每个 tr 中的 td

这需要组合,首先获取 tr,然后以 tr 作为上下文的计数:

foreach ($xpath->evaluate('//table/tbody/tr') as $tr) {
  var_dump($xpath->evaluate('count(td)', $tr);
}