XSLT - 祖先的先前节点,计数错误

时间:2011-07-16 21:18:40

标签: xml xslt xpath xslt-2.0

1 个答案:

答案 0 :(得分:1)

我认为所有这些都取决于放置代码片段的当前模板上下文以及随后对position()的错误使用。如果您在ref节点上进行迭代,则上述片段可以正常工作,如果您正在对它们进行匹配则不行。

例如在这种情况下:

 <xsl:template match="//ref">
 <!-- your fragment -->
 </xsl:template>

您的代码永远不会有效,因为postion() 显然渐进式。你应该使用类似的东西:

    <xsl:variable name="curPos" 
                  select="count(../preceding-sibling::tr/ref 
                                | preceding-sibling::ref)"/>
    <xsl:value-of select="$curPos"/>
        <xsl:variable name="prevRefID"
            select="//layout//*/ref
                    [count(preceding-sibling::ref) &lt; $curPos]/@id"/>

或更好,更改模板上下文,以便您可以使用position()