如何使用xPath选择其类型的第一个节点? 在CSS中我使用 a:nth-of-type(1)。预期结果是 b ,с和 first d 节点(text ='1')
<a>
<b>1
<c>1</c>
</b>
<d>1</d>
<d>2</d>
<d>3</d>
</a>
答案 0 :(得分:1)
纯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中看到这样做的方法。看看它为什么需要它会很有趣。
答案 1 :(得分:0)
所以,答案是.. XPath 1.0中的实现是基于Michael Kay的精彩答案。
对于:nth-of-type(1),它看起来像:
//a//*[name(preceding-sibling::*[1]) != name()]
对于:nth-of-type(n)其中n&gt; 1它看起来像:
//a//*[name(preceding-sibling::*[n]) != name() and name(preceding-sibling::*[n-1]) = name()]
当然,它很棘手,在大多数情况下可以被更明显的功能所取代。 目标是找到完全相同的CSS伪的XPath实现。