选择多个节点块,包括XPath 1.0的开始和结束节点

时间:2015-06-12 16:05:25

标签: php xpath

以下是我的XML的简化版本:

<div><p class="start">1</p></div>
<div><p class="data">2</p></div>
<div><p class="data">3</p></div>
<div><p class="end">4</p></div>
<div><p class="data">5</p></div>
<div><p class="start">6</p></div>
<div><p class="data">7</p></div>
<div><p class="end">8</p></div>

这是我的代码的简化版本:

<?php
...
$start_nodes = $finder->query('//div[p/@class="start"]');
foreach ($start_nodes as $node) {
  $data_nodes = $finder->query('following-sibling::div[p/@class="end"][1]/preceding-sibling::*', $node);
  ...
}

我不知道如何选择<div><p class="start"/></div>节点,下一个<div><p class="end"/></div>节点以及其间的所有节点。在上面的例子中,我希望得到1-4,然后是6-8,然后跳过5。

我在PHP中使用XPath 1.0并且它不是XLST。

1 个答案:

答案 0 :(得分:1)

这是一种可能的方式:

$data_nodes
上面的

|是三个独立的xpath表达式的union($start)的结果;第一个xpath用于选择'start element'($end),第二个用于选择'end element'($inbetween),最后一个用于选择start和end元素之间的元素({{1 }})。

<强> Demo

输出

start 1 :
1, 2, 3, 4,

start 2 :
6, 7, 8,