我有以下XML(实际上是HTML):
<html>
<h4>something</h4>
<p>a</p>
<p>b</p>
<h4>otherthing</h4>
<p>c</p>
</html>
XPath是否可以选择跟随第一个“h4”节点的兄弟节点但不跟随第二个“h4”节点的兄弟节点的“p”节点(仅选择“p”节点a&amp; b)?
答案 0 :(得分:4)
我的看法
//p[preceding-sibling::h4[1] and not(preceding-sibling::h4[position() > 1])]
找到所有p元素,它们是第一个h4的兄弟,但不是同一轴上任何其他h4的兄弟姐妹
替代
//h4[1]/following-sibling::p[count(preceding-sibling::h4) = 1]
查找第一个h4元素的后续p元素,它只有一个前面的h4元素
答案 1 :(得分:3)
使用强>:
/*/h4[1]/following-sibling::p
[not(count(preceding-sibling::* | /*/h4[2])
=
count(preceding-sibling::*)
)
]
更一般地说,两个节点集$ns1
和$ns2
的交集是选择:
$ns1[count(.|$ns2) = count($ns2)]
节点$ n不在节点集$ ns1中的事实由表示:
not(count($n | $ns1) = count($ns1))
这是标准XPath |
(联合运算符和not()
函数的基本集合理论和用法。
答案 2 :(得分:1)
假设第一个<p>
之前没有<h4>
,
//h4[2]/preceding-sibling::p