Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

XSLT 参数概述

参数可传递至指定或未命名的模板。在模板内,必须声明参数,然后可以通过使用美元标志 ($) 预先配置其名称来引用参数。

声明参数

参数的范围可以是全局的,也可以是本地的。Junos OS 在脚本初始化时设置值的参数必须定义为全局参数。全局参数声明仅在样式表声明后进行。如果 Junos OS 未为该参数提供值,则脚本可为全局参数分配默认值。

必须在块开始时声明本地参数,其范围仅限于声明块的块。在模板中,您可使用<xsl:param>标记和name属性声明参数。或者,通过包含可包含 XPath 表达式的属性来声明每个参数的select默认值。如果在未使用参数的情况下调用了模板,则评估默认表达式,并将结果分配给参数。如果不在模板中定义默认值,参数将默认为空字符串。

以下命名模 print-host-name 板将声明参数 message 并定义默认值:

该模板通过使用美元标志 ($) 前缀参数名称来访问参数值 message

传递参数

调用模板时,使用元素和name属性将参数传递到模板中<xsl:with-param>。属性的<xsl:with-param>name值必须与实际模板中定义的参数名称匹配;否则参数将忽略。或者,对于传递至模板的每一个参数,您可以使用select属性或元素的内容<xsl:with-param>来定义值。

在模板中使用的参数值取决于模板的调用方式。以下三个称为 print-host-name 模板的示例说明了可能的呼叫环境。

如果称为模板,但不包括<xsl:with-param>特定参数的元素,则评估模板中定义的默认表达式,并将结果分配给参数。如果模板中没有该参数的默认值,参数将默认为空字符串。以下示例称为命名模板,print-host-name但呼叫中不包含任何参数。在这种情况下,命名的模板将为模板中print-host-name定义的message参数使用默认值,或者在不存在默认情况下使用空字符串。

如果调用模板并包含一个参数,但未定义呼叫环境中参数的值,则脚本将在之前初始化时在参数的当前值中传递,或者在参数从未被宣布时生成错误。以下示例调用指定模板 print-host-name 并在参数中 message 通过,但不包括值。如果 message 在脚本中声明并初始化,并且该块可看到范围,则使用当前的 message 值。如果 message 在脚本中声明但未初始化,则该值 message 将是一个空字符串。如果 message 尚未申报,则脚本将生成错误。

如果称为模板,包括参数并定义参数值,则该模板将使用所提供的值。以下示例将命名模板print-host-namemessage称为参数和定义值,因此模板使用新值。

示例:参数和匹配模板

以下模板匹配/,XML 文档的根部。然后生成一个名为 <outside>的元素,该元素会添加到输出文档中,并指示 Junos OS 管理流程 (mgd) 递归地将模板应用到configuration/system子树上。该参数host用于处理任何匹配节点。参数的host值是配置层次结构的 [edit system] 级别上的语句值host-name

以下模板与元素匹配<system>,该元素是上一个示例中选择的子树的顶部。该host参数在未默认值下申报。生成一个元素,其中包含在上一<inside>个示例中的标记中<xsl:with-param>定义的参数值host

示例:参数和命名模板

以下命名模 report-changed 板声明两个参数: dot默认用于当前节点,且 changed默认用于 changed 节点 dot属性。

下一changed节称为模板,report-changed并定义不同于模板中report-changed定义的默认来源的属性源。report-changed调用模板时,它将使用新定义的源来changed代替默认源的属性。

同样,模板调用可以包括参数 dot 并定义默认电流节点以外的源,如这里所示: