CSS的xPath等价物:nth- of-type(n)

问题描述 投票:0回答:2

如何使用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>
html xpath css-selectors
2个回答
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中看到这样做的方法。看看为什么需要它会很有趣。


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实现,它将完全相同。

© www.soinside.com 2019 - 2024. All rights reserved.