如何在XSLT模板参数中选择元素?

时间:2011-10-04 19:39:56

标签: xslt

我有以下XSLT模板:

    <xsl:template name="foo">
    <xsl:param name="arg1">0</xsl:param>
    <xsl:param name="arg2" />
    <xsl:param name="arg3" />
    <xsl:call-template name="bar">
        <xsl:with-param name="arg1"><xsl:value-of select="$arg1" /></xsl:with-param>
        <xsl:with-param name="arg2"><xsl:copy-of select="$arg2" /></xsl:with-param>
        <xsl:with-param name="arg3"><!-- what do I put here? --></xsl:with-param>
    </xsl:call-template>
</xsl:template>

现在arg3是一个xml snippit。我只想在arg3中选择一个元素作为arg3传递给bar。如何从参数中选择单个节点?我试过了,但没办法。

请不要建议发送arg3 / qux的值而不是arg3。这是有充分理由的,但这超出了这个问题的范围。

2 个答案:

答案 0 :(得分:1)

这取决于XML代码段的外观,但您可以执行以下操作:

<xsl:value-of select="$arg3/first_name" />

修改

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext msxsl">

    <xsl:template match="/">               
        <xsl:value-of select="ext:node-set($arg3)/first_name" />
    </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

只需将$ arg3视为节点,对我有用。

<xsl:call-template name="bar">
    <xsl:with-param name="arg1"><xsl:value-of select="$arg1" /></xsl:with-param>
    <xsl:with-param name="arg2"><xsl:copy-of select="$arg2" /></xsl:with-param>
    <xsl:with-param name="arg3" select="$arg3/sub-node"/>
</xsl:call-template>