XSLT中变量(xsl:variable)用于定义不可变的内部值,参数(xsl:param)支持外部传值并可设默认值,二者通过$name引用,广泛用于存储计算结果、配置项和模板间通信,提升样式表的灵活性与可维护性。
XSLT中的变量(
xsl:variable
xsl:param
name
select
在XSLT的世界里,变量和参数是构建灵活、可维护样式表的基石。我个人觉得,理解它们就像理解编程语言里的常量和函数参数,虽然概念相似,但在XSLT的声明式范式下,它们的行为又有点独特。
定义一个变量,你会用到
<xsl:variable>
<!-- 全局变量示例:定义一个作者名 --> <xsl:variable name="globalAuthor" select="'张三'"/> <xsl:template match="/"> <!-- 局部变量示例:拼接一个问候语 --> <xsl:variable name="localGreeting" select="concat('你好,', $globalAuthor)"/> <output> <xsl:value-of select="$localGreeting"/> <xsl:text> 欢迎来到XSLT世界。</xsl:text> </output> </xsl:template>
你看,
select
select
参数的定义则使用
<xsl:param>
Transformer
XslCompiledTransform
select
<!-- 全局参数示例:定义一个页面标题,可从外部传入,有默认值 --> <xsl:param name="pageTitle" select="'默认页面标题'"/> <xsl:template match="/"> <h1><xsl:value-of select="$pageTitle"/></h1> <!-- 局部参数示例 (通常用于被调用的模板,通过xsl:with-param传递) --> <xsl:call-template name="renderItem"> <xsl:with-param name="itemId" select="item/@id"/> </xsl:call-template> </xsl:template> <xsl:template name="renderItem"> <xsl:param name="itemId"/> <xsl:param name="highlightColor" select="'blue'"/> <!-- 局部参数带默认值 --> <div style="color:{$highlightColor};">Item ID: <xsl:value-of select="$itemId"/></div> </xsl:template>
使用变量和参数时,你只需要在它们的名字前加上一个
$
$globalAuthor
$pageTitle
这个问题,我刚开始学XSLT的时候也纠结过,毕竟它们看起来都像是用来“存东西”的。但实际上,它们的定位和使用场景是挺不一样的。
最核心的区别在于:变量是内部的、不可变的命名值;参数是外部可控的、具有默认值的命名值。
变量 (xsl:variable
参数 (xsl:param
从我个人的经验来看,如果某个值是样式表内部逻辑计算出来的,或者是一个在整个转换过程中都保持不变的常量,那它就是变量的菜。如果这个值需要根据不同的转换场景而变化,并且这些变化是由样式表外部决定的,那么参数就是不二之选。比如,我曾经写过一个通用的XML到HTML转换器,通过传入一个
mode
实际项目中,变量和参数的运用简直是无处不在,它们让XSLT从一个简单的转换工具,变得更像一个有逻辑、可配置的程序。
变量的常见应用场景:
<xsl:variable name="totalPrice" select="sum(//item/price)"/> <!-- ... 后续引用 $totalPrice ... -->
<xsl:variable name="dateFormat" select="'yyyy-MM-dd'"/> <xsl:variable name="nsPrefix" select="'my:'"/>
<xsl:variable name="activeUsers" select="//user[status='active' and @enabled='true']"/> <!-- ... 遍历 $activeUsers ... -->
<xsl:variable name="isAdmin" select="user/@role = 'admin'"/> <xsl:if test="$isAdmin">...</xsl:if>
参数的常见应用场景:
<!-- 从外部传入,决定是否显示调试信息 --> <xsl:param name="debugMode" select="'false'"/> <xsl:if test="$debugMode = 'true'"> <!-- ... 打印调试信息 ... --> </xsl:if>
category
minPrice
<xsl:param name="filterCategory" select="''"/> <xsl:template match="product"> <xsl:if test="not($filterCategory) or category = $filterCategory"> <!-- ... 显示产品信息 ... --> </xsl:if> </xsl:template>
xsl:call-template
xsl:apply-templates
xsl:with-param
<xsl:call-
以上就是XSLT变量和参数怎么定义使用?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号