我正在尝试使用xpath来获取表的内容。
表格如下所示
<div>
<table>
<tr class="tableheader">
<td> Stuff </td>
</tr>
<tr class="indent1">
<td> Contents </td>
</tr>
<tr class="indent1">
<td> Contents </td>
</tr>
<tr class="tableheader">
<td> Stuff </td>
</tr>
<tr class="indent1">
<td> Contents </td>
</tr>
<tr class="indent1">
<td> Contents </td>
</tr>
</table>
</div>
我试图在表格标题之间提取所有tr [@ class ='indent1']的值
这是我到目前为止所做的:
$elements = $xPath->query("div/table/tbody/tr[@class='tableheader']");
for ($i = 0; $i < $elements->length; $i++){
print "Node: ".$elements->item($i)->nodeValue."\n";
$siblings = $xPath->query("following-sibling::tr[@class='indent1']", $elements->item($i));
foreach ($siblings as $sibling) {
print "\tSibling: ".$sibling->nodeValue."\n";
}
}
预期输出
Node: Stuff
Sibling: Contents
Sibling: Contents
Node: Stuff
Sibling: Contents
Sibling: Content
取值
相反,它为每一个打印ALL tr class =“indent1s”。
感谢。
答案 0 :(得分:1)
修改强>
好吧也许这可以帮到你。只需让每个兄弟都用PHP检查属性:
foreach ($siblings as $sibling) {
if (!is_null($sibling->attributes)
&& $sibling->attributes->getNamedItem('class')->nodeValue == 'indent1') {
break;
}
print "\tSibling: ".$sibling->nodeValue."\n";
}
一般来说你的目标是什么?如果您只想打印出节点,那么使用SAX处理结构会更合适也更容易(使用PHP的SAX)。
或者XSLT但是我无法帮助你。