html - 某个兄弟之前的所有子元素的 XPath?

标签 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>

对于第二个事件节点。

知道如何解决这个问题吗? 另外,我想我可能会在谓词中滥用 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/

相关文章:

javascript - 我要加时间?

javascript - 单击浏览器后退按钮时隐藏模态窗口(模态框)

javascript - 根据用户的输入匹配用户并从中选择一个

html - 部分文本通过 html/Css 上的页脚

html - 在背景中偏移图像

C#如何读取\r\n字符串

SimpleXMLELement 的 PHP json_encode 在不同的环境下给出不同的结果

android - 如何在 xml Android studio 中使用 DrawerLayout

java - 如何为 Selenium webdriver assert 连接嵌套的 xpath?即连续标签和单独的按钮

python - xml 中的 xpath 命名空间的另一个问题