PHP Xpath的以下兄弟

PHP Xpath的以下兄弟,php,xpath,domxpath,Php,Xpath,Domxpath,我正在尝试使用xpath获取表的内容 这张桌子看起来像这样 <div> <table> <tr class="tableheader"> <td> Stuff </td> </tr> <tr class="indent1"> <td> Contents </td> </tr> <tr class="indent1"> <td>

我正在尝试使用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=“indent1s”

谢谢

编辑:

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

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

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


或者可能,但我无法帮助您。

它为第一个
tableheader
节点打印所有
indent1
s是显而易见的,因为所有后续
indent1
s都是此节点的同级。你能提供准确的输出吗?好的,准确的输出被破坏了,正如你所说的,它打印每个缩进1,因为他们都是兄弟姐妹。我试图实现的是上面的预期输出,这似乎是我无法达到的。我无法让它打印tableheader[1]和tableheader[2]之间的缩进1同级,然后再打印tableheader[2]-[3]等等。。希望这是有道理的。谢谢felixWell所有这些信息都将进入一个数组。。这是一个巨大的表:架构程序-架构和设计-构建蓝图航空飞行飞机目标是提取架构程序的所有程序数据,并将它们存储到数组$program[“架构程序”]=@array(“架构和设计”,“构建蓝图”);然后转到下一个标题和值。。。。因此,这就是为什么我只是想在两者之间找到一个平衡点,并非所有的问题都是孩子们都是兄弟姐妹,这使得问题变得更加棘手
Node: Stuff
   Sibling:  Contents
   Sibling:  Contents
Node: Stuff
   Sibling:  Contents
   Sibling:  Content
foreach ($siblings as $sibling) {
    if (!is_null($sibling->attributes) 
        && $sibling->attributes->getNamedItem('class')->nodeValue == 'indent1') {
           break;
    }
    print "\tSibling: ".$sibling->nodeValue."\n";  
}