我想获取每个svg:use[@href='#electron']
的位置。我期望在相同比赛的其他元素中拥有位置,但是我得到的是我不明白的数字。我应该如何使用position()
和last()
来获得期望的数字?
<!-- Add node "animateTransform" -->
<xsl:template match="svg:use[@href='#electron']">
<!-- Copy the element -->
<xsl:copy>
<!-- And everything inside it -->
<xsl:apply-templates select="@* | node()"/>
<xsl:if test="position() = last()">
<xsl:attribute name="class">val</xsl:attribute>
</xsl:if>
<animateTransform attributeName="transform" type="rotate" from="360 0 0" to="0 0 0" dur="20s" repeatCount="indefinite" />
<xsl:value-of select="position()"/>/<xsl:value-of select="last()"/>
</xsl:copy>
</xsl:template>
答案 0 :(得分:1)
position()
和last()
函数返回相对于当前节点集的位置。
但是,节点集不是由match
属性确定的;这只是一个决定要应用哪个模板的过滤器。
问题在于该部分确实选择了要在其上应用模板的节点,例如最后apply-templates
个匹配项的svg:use
。
尝试在该位置使用它:
<xsl:apply-templates select="svg:use[@href='#electron']"/>
您将获得期望的位置。
或者,您可以更改对最后一项的支票,例如:
<xsl:if test="not(following-sibling::svg:use[@href='#electron'])">
<xsl:attribute name="class">val</xsl:attribute>
</xsl:if>