某个兄弟姐妹之前所有子元素的XPath?

时间:2016-10-23 22:12:33

标签: html xml xpath

我的HTML文件如下所示:

<r>
  <ab id = "1">
    <event/>
    <li>a</li> 
    <li>b</li>
    <action/>
    <li>a2</li>
    <li>b2</li>
    <action/>
  </ab>
  <ab id = "2">
    <event/>
    <li>a3</li>
    <li>b3</li>
    <action/>
  </ab>
</r>

我想要做的是首先找到html文件中的所有事件节点,然后为每个事件节点找到所有后续兄弟节点,直到它遇到动作节点。因此,对于第一个事件节点,结果应为

<li>a</li>
<li>b</li>

对于第二个事件节点,结果应为

<li>a3</li>
<li>b3</li>

第一步,我用了

/r/ab/event

并得到了预期的结果,然而,我在第二步中陷入困境和迷茫,我试图使用

following-sibling::*[following-sibling::action[1]]

它给了我结果

<li>a</li>
<li>b</li>
<action/>
<li>a2</li>
<li>b2</li>

表示第一个事件节点,结果为

<li>a3</li>
<li>b3</li>

表示第二个事件节点。

如何解决这个问题呢? 另外,我想我可能会在谓词中滥用跟随兄弟,我查看了文档https://www.w3.org/TR/xpath,但是我不太了解如何使用它,任何人都可以帮忙解释一下吗? / p>

1 个答案:

答案 0 :(得分:0)

此XPath

/r/ab/event/following-sibling::li[not(preceding-sibling::action)]

将选择li元素后面的所有event元素,并且没有前面的action元素兄弟,

<li>a</li>
<li>b</li>
<li>a3</li>
<li>b3</li>

按要求。