我想捕获td标签之间的所有内容,但是将它们除以tr。所以我可以得到一个包含每个tr内容的数组。
<div id="box">
<tr align='center'>
<td>1</td>
<td style='padding-left: 0px !important;padding-right: 10px !important;'> <div id=''></div></td>
<td>45</td>
<td>62</td>
</tr><tr align='center'>
<td>2</td>
<td style='padding-left: 0px !important;padding-right: 10px !important;'> <div id=''></div></td>
<td>35</td>
<td>47</td>
</tr><tr align='center'>
<td>3</td>
<td style='padding-left: 0px !important;padding-right: 10px !important;'> <div id=''></div></td>
<td>63</td>
<td>58</td>
</tr>
我试过这个:
<?php
$url = '';
$html = file_get_contents($url);
$doc = new DOMDocument();
$doc->preserveWhiteSpace = FALSE;
@$doc->loadHTML($html);
$xpath = new DOMXpath ($doc);
$expresion = "//div[@id='box']//tr//td";
$node = $xpath->evaluate($expresion);
foreach ($node as $nd)
{
echo $nd->nodeValue;
}
?>
但输出是:
1
45
62
2
35
47
3
63
58
答案 0 :(得分:0)
如果要按td
对tr
值进行分组,我会将xpath分成两个查询。一个查询选择<tr>
个节点,第二个查询选择该节点的<td>
子节点。
如果你将它放入循环中,它可能如下所示:
<?php
$html = <<<EOF
<div id="box">
... Your HTML comes here
</tr>
EOF;
$url = '';
$doc = new DOMDocument();
$doc->preserveWhiteSpace = FALSE;
@$doc->loadHTML($html);
$xpath = new DOMXpath ($doc);
$expresion = "//div[@id='box']//tr";
$trs = $xpath->evaluate($expresion);
foreach ($trs as $tr)
{
$tdvals = array();
foreach($xpath->query('td', $tr) as $td) {
/* Skip the td with the empty text value */
if(trim($td->nodeValue) !== '') {
$tdvals []= $td->nodeValue;
}
}
echo implode(',', $tdvals) . PHP_EOL;
}
输出:
1,45,62
2,35,47
3,63,58
另一件事。在您的示例中,您使用file_get_contents()
加载HTML。请注意,您可以使用DOMDocument::loadHTMLFile()
加载(远程)文件。