如何使用xPath选择其类型的第一个节点?在CSS中我使用:nth-of-type(1)。预期结果是b,с和前d个节点(text ='1')
<a>
<b>1
<c>1</c>
</b>
<d>1</d>
<d>2</d>
<d>3</d>
</a>
纯粹的XPath 1.0中的棘手。
在XSLT中,这通常是分组算法的一部分,所以在2.0中你会写
<xsl:for-each-group select="*" group-by="node-name()">
.. current-group()[1] ..
或者在独立的XPath 2.0中你可以做类似的事情
//*[not(node-name() = preceding-sibling::*/node-name())]
但我无法在XPath 1.0中看到这样做的方法。看看为什么需要它会很有趣。
所以,答案..在XPath 1.0中的实现是基于Michael Kay的真棒答案。
对于:nth-of-type(1)它看起来像:
//a//*[name(preceding-sibling::*[1]) != name()]
对于:nth-of-type(n),其中n> 1,它看起来像:
//a//*[name(preceding-sibling::*[n]) != name() and name(preceding-sibling::*[n-1]) = name()]
当然,它很棘手,在大多数情况下可以被更明显的功能所取代。目标是找到CSS伪的XPath实现,它将完全相同。