2011-08-24 84 views
2

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

我有下面的模板,它被用来为我的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

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

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

感谢EMPO :-)。这是简单的答案,有时会错过。 –

+0

要记住的规则是:从不使用花括号/内部/ XPath表达式,只用它们来分隔嵌套在文本文本中的XPath表达式。 –

+0

谢谢迈克尔。我会尽力 :-) –

相关问题