我有一个如下所示的 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>
对于第二个事件节点。
知道如何解决这个问题吗? 另外,我想我可能会在谓词中滥用 following-sibling,我查看了文档,https://www.w3.org/TR/xpath ,但是不太明白怎么用,谁能帮忙解释一下?
最佳答案
这个 XPath
/r/ab/event/following-sibling::li[not(preceding-sibling::action)]
将选择 event
元素之后的所有 li
元素,并且没有前面的 action
元素兄弟,
<li>a</li>
<li>b</li>
<li>a3</li>
<li>b3</li>
根据要求。
关于html - 某个兄弟之前的所有子元素的 XPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40208307/