2

我正在尝试使用 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

s

相反,它为每个打印 ALL tr class="indent1s" 。

谢谢。

4

1 回答 1

1

编辑:

好吧,也许这对你有帮助。只需获取每个兄弟姐妹并使用 PHP 检查属性:

foreach ($siblings as $sibling) {
    if (!is_null($sibling->attributes) 
        && $sibling->attributes->getNamedItem('class')->nodeValue == 'indent1') {
           break;
    }
    print "\tSibling: ".$sibling->nodeValue."\n";  
} 

您的总体目标是什么?如果您只想打印出节点,使用SAX处理结构会更合适和更容易(SAX 和 PHP)。

或者也许是XSLT,但我无法帮助你。

于 2010-01-23T21:38:47.323 回答