XSL - 有没有办法让这个模板可以重用?

时间:2011-08-24 08:32:23

标签: xml xslt ant

XSL noob: - )

我有以下模板,用于为我的ANT脚本生成下拉列表。

    <!-- Dropdown templates -->
<xsl:template name="componentDropdown">
    <xsl:text>trunk</xsl:text>
    <!-- Branch Data -->
    <xsl:for-each select="document('../../../temp/components_branches.xml')/lists/list/entry">
        <xsl:sort select="commit/@revision" order="descending" />
        <xsl:text>;branches/</xsl:text>
        <xsl:value-of select="name" />
    </xsl:for-each>

    <!-- Tag Data -->
    <xsl:for-each select="document('../../../temp/components_tags.xml')/lists/list/entry">
        <xsl:sort select="commit/@revision" order="descending" />
        <xsl:if test="name != 'archive'">
            <xsl:text>;tags/</xsl:text>
            <xsl:value-of select="name" />
        </xsl:if>               
    </xsl:for-each>
</xsl:template>

问题是我已经三次超过了粘贴作业 - 所有相同,但“插件”和“网站”正在交换对“组件”的引用。我们还有一些ANT脚本,我想迁移到这个,所以理想情况下,我希望这是一个可重用的基于函数的模板。

正在进行中,但我目前得到以下内容: -

    <xsl:template name="dropdown">
    <xsl:param name="type">website</xsl:param>
    <xsl:param name="path"></xsl:param>

    <!-- Branch Data  -->
    <xsl:text><xsl:value-of select="$path" /></xsl:text>       
    <xsl:for-each select="document(concat('../../../temp/{$type}_tags.xml',''))/lists/list/entry">
        <xsl:sort select="commit/@revision" order="descending" />
        <xsl:text>;branches/</xsl:text>
        <xsl:value-of select="name" />
    </xsl:for-each>
</xsl:template> 

问题似乎是让documnet()函数接受动态变量。

我唯一可以说的是XSL被声明为1.0。我不知道这是否有所作为,但任何指针都表示赞赏:)。

干杯, 詹姆斯

1 个答案:

答案 0 :(得分:1)

要使document()正常工作,您需要连接如下:

 document(concat('../../../temp/',$type,'_tags.xml',''))