我的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>
答案 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>
按要求。