我有以下XML(实际上是HTML):的XPath子集选择
<html>
<h4>something</h4>
<p>a</p>
<p>b</p>
<h4>otherthing</h4>
<p>c</p>
</html>
可以在XPath的选择被跟随第一“H4”节点的兄弟但不是以下的兄弟姐妹的“p”的节点第二个“h4”节点(仅选择“p”节点a & b)?
我有以下XML(实际上是HTML):的XPath子集选择
<html>
<h4>something</h4>
<p>a</p>
<p>b</p>
<h4>otherthing</h4>
<p>c</p>
</html>
可以在XPath的选择被跟随第一“H4”节点的兄弟但不是以下的兄弟姐妹的“p”的节点第二个“h4”节点(仅选择“p”节点a & b)?
我采取
//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元件
我认为你可以简化你的第一个答案到'/ */p [not(prior-sibling :: h4 [2])]',第二个答案放入'/ */p [count(prior-sibling :: h4)= 1]'。 – 2010-08-28 23:28:44
使用:
/*/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()
功能的使用。
+1集合论的调用。 – 2010-08-28 23:31:42
好问题(+1)。请参阅我的答案,了解使用通用XPath表达式进行节点集交集并检查节点是否不在给定节点集中的解决方案。 – 2010-08-28 15:21:53