2012-08-13 41 views
1

多次我有一个像下面使用相同的XSLT代码在同一个文件

<xsl:choose> 
     <xsl:when test="v:Values = 'true'"> 
     <xsl:text>A</xsl:text> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:text>B</xsl:text> 
     </xsl:otherwise> 
... 
    </xsl:choose> 

一些XSLT代码我想使用的代码,很多时候,这一块在同一个文件。我可以将它放在模板中并在需要时调用它吗?

+1

http://www.webmasterworld.com/xml/3295698.htm。在页面的一半处查看。 – 2012-08-13 21:46:26

回答

2

是 - 它被称为xsl:call-template。

任何模板都可以被命名。该名称可以通过名称空间进行限定。例如...

<xsl:template match="some match condition" name="call-me"> 
    bla bla bla (template content) 
</xsl:template> 

如果模板都有一个名字,它甚至可以省略匹配条件是这样的...

<xsl:template name="call-me"> 
<xsl:param name="phone-number" /> 
    bla bla bla (template content) 
</xsl:template> 

命名的模板有许多参数,只要你喜欢。以上片段是声明一个名为phone-number的参数的示例。在模板的顺序构造,你会参考这个参数,以同样的方式作为一个变量,像这样......

$phone-number 

要调用一个命名模板,使用XSL:从序列中调用模板构造函数。例如...

<xsl:call-template name="call-me"> 
<xsl:with-param name="phone-number" select="'55512345678'" /> 
</xsl:template> 

请注意,xsl:with-param用于传递实际参数值。

请注意,在XSLT 2.0中,您还可以定义可从XPATH表达式中调用的函数。在某些情况下,函数可能是命名模板的更好选择。

参见:

  1. XSLT 2.0 spec re.: named templates
  2. XSLT 1.0 spec re.: named templates
+0

@Filburt感谢您的纠正。 – 2012-08-14 06:10:03

+0

有没有办法在调用模板时更改上下文节点?这是必要的,因为在模板内部,我只使用相对xpath。 – daniely 2012-08-25 20:51:51

+0

是的。 xsl:apply-templates和xsl:for-每个都改变上下文节点。有关答案的更多详细信息,请提供更多详细信息。 – 2012-08-26 07:14:16

相关问题