以下是我的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。
答案 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,