在PHP中解析HTML:得到table的onclick属性值
Parsing HTML in PHP: get table onclick attribute value
我想解析 HTML 页面以从 table 获取数据(基本上我想遍历所有 tr
标签)。
我有下一个问题:
- 如何跳过 table 头中的
tr
?
- 如何获取
td
标签的onclick
属性值?
- 如何在每个
tr
中计算 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);
}
我想解析 HTML 页面以从 table 获取数据(基本上我想遍历所有 tr
标签)。
我有下一个问题:
- 如何跳过 table 头中的
tr
? - 如何获取
td
标签的onclick
属性值? - 如何在每个
tr
中计算
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);
}