XSLT - 写入名称模板并将xpath作为参数传递

时间:2015-08-06 08:20:42

标签: xml xslt xslt-2.0

我有一个xml如下,

<doc>
    <p c="1">para <style c="Bold">content 1</style> </p>
    <p c="1">para <style c="Bold">content 2</style> </p>
    <p c="1">para <style c="Bold">content 2</style> </p>
    <p c="1">para <style c="Bold">content 2</style> </p>
    <p c="1">para <style c="Bold">content 2</style> </p>
    <s></s>
</doc>

我的目标是编写一个名称模板来计算<s>节点的优先兄弟节点数,并在<s>节点显示该数字。 我写了以下xsl来做到这一点,

<xsl:template name="myTemp">
        <xsl:param name="var" as="node()"/>
        <xsl:value-of select="count($var/preceding-sibling::p)"/>
    </xsl:template>

    <xsl:template match="s">
        <xsl:call-template name="myTemp">
            <xsl:with-param name="var" select="s"/>
        </xsl:call-template>
    </xsl:template>

但它在撒克逊人中给了我'An empty sequence is not allowed as the value of parameter $var'

您能否提出解决此问题的建议。

请注意:有更简单的方法可以计算<s>节点的主要兄弟和打印。但我需要的是编写一个名称模板并编写另一个模板并调用该名称模板。

1 个答案:

答案 0 :(得分:3)

在匹配s的模板中,它是上下文节点,因此您需要<xsl:with-param name="var" select="."/>而不是<xsl:with-param name="var" select="s"/>