xsl:variable 与 xsl:param

xsl:variable 与 xsl:param

  (2006-09-01 14:00:01)
  分类: 页面
先看个例子:

<xsl:call-template name="footer">
<xsl:with-param name="date" select="@lastupdate"/>
</xsl:call-template>



<xsl:template name="footer"> 
<xsl:param name="date">today</xsl:param> 
<xsl:text>Last update: </xsl:text> 
<xsl:value-of select="$date"/>
</xsl:template>

对xml模板 来说,name属性是很关键的 call-template /apply-template 的name必须要和模板的name

相对应。模板相当于一个函数,可以暂时这么看。而name相当于函数名称把。

在call-template中 使用xsl:with-param 相当于函数参数输入

而参数声明相当就是在xsl:template的 xsl:param


说到xsl:variable。

可以用<xsl:variable name="ShowDepth"><计算的值></xsl:variable>来声明

相当于c中的 const 因为变量一旦声明就无法再被改变。

对于xsl:param和xsl:variable 都可以用 $+name 来直接选择比如

<xsl:value-of select="$date"/> 就是选择date变量或者参数

变量和参数,都是有声明范围的 这点和语言中的道理一样。

最后最最重要一点 :xsl的variable是常量不能再改变

不要被它的名称迷惑
<xsl:template match=“w:tc”><fo:table-cell border=“1pt solid black"padding=“2pt"display-align=“center”><xsl:variable name=“totalCols"select=“count(ancestor::w:tbl/w:tblGrid/w:gridCol)”/><xsl:variable name=“precedingSpanSum”>xsl:choose<xsl:when test=“preceding-sibling::w:tc”><xsl:value-of select=“sum(preceding-sibling::w:tc/w:tcPr/w:gridSpan/@w:val) + count(preceding-sibling::w:tc[not(w:tcPr/w:gridSpan)])”/></xsl:when>xsl:otherwise0</xsl:otherwise></xsl:choose></xsl:variable><xsl:if test=“w:tcPr/w:gridSpan”><xsl:variable name=“declaredSpan"select=“w:tcPr/w:gridSpan/@w:val”/><xsl:variable name=“remainingCols"select=”$totalCols - $precedingSpanSum”/><xsl:attribute name=“number-columns-spanned”>xsl:choose<xsl:when test=”$declaredSpan > $remainingCols”><xsl:value-of select=”$remainingCols"/></xsl:when>xsl:otherwise<xsl:value-of select=“$declaredSpan”/></xsl:otherwise></xsl:choose></xsl:attribute></xsl:if><!–修正的行合并逻辑–><xsl:if test=“w:tcPr/w:vMerge[@w:val=‘restart’]”><xsl:variable name=“currentPos"select=“count(preceding-sibling::w:tc) + 1”/><xsl:variable name=“rowSpan”><xsl:call-template name=“calculateRowSpan”><!–修正点1:直接取后续所有行–><xsl:with-param name=“remainingRows"select=”…/following-sibling::w:tr”/><xsl:with-param name=“position"select=”$currentPos"/><xsl:with-param name=“count"select=“1”/></xsl:call-template></xsl:variable><xsl:attribute name=“number-rows-spanned”><xsl:value-of select=”$rowSpan"/></xsl:attribute></xsl:if><fo:block linefeed-treatment=“ignore"white-space-collapse=“true”><xsl:apply-templates select=”.//w:p"/></fo:block></fo:table-cell></xsl:template><!–新增递归模板–><xsl:template name=“calculateRowSpan”><xsl:param name=“remainingRows”/><xsl:param name=“position”/><xsl:param name=“count”/>xsl:choose<!–修正点2:增加空行判断–><xsl:when test=“count($remainingRows) = 0”><xsl:value-of select=“$count”/></xsl:when>xsl:otherwise<xsl:variable name=“currentRow"select=”$remainingRows[1]“/><xsl:variable name=“targetCell"select=”$currentRow/w:tc[$position]”/><!–修正点3:处理单元格位置偏移–><xsl:variable name=“precedingSpan"select=“sum($currentRow/w:tc[position() < $position]/w:tcPr/w:gridSpan/@w:val)”/>xsl:choose<!–修正点4:精准定位合并目标单元格–><xsl:when test=”$targetCell/w:tcPr/w:vMerge[@w:val=‘continue’] and ($position - $precedingSpan) <= count($currentRow/w:tc)“><xsl:call-template name=“calculateRowSpan”><xsl:with-param name=“remainingRows"select=”$remainingRows[position() > 1]”/><xsl:with-param name=“position"select=”$position"/><xsl:with-param name=“count"select=”$count + 1"/></xsl:call-template></xsl:when>xsl:otherwise<xsl:value-of select=“$count”/></xsl:otherwise></xsl:choose></xsl:otherwise></xsl:choose></xsl:template>修改这段样式表,使表格的行合并单元格生效,一定要注意这是word的xml转xls-fo的xlst样式表,且xsl和xml版本均为1.0,请直接给出修改结果
03-12
<xsl:template match="w:tc"><fo:table-cell border="1pt solid black"padding="2pt"display-align="center"><xsl:variable name="totalCols"select="count(ancestor::w:tbl/w:tblGrid/w:gridCol)"/><xsl:variable name="precedingSpanSum"><xsl:choose><xsl:when test="preceding-sibling::w:tc"><xsl:value-of select="sum(preceding-sibling::w:tc/w:tcPr/w:gridSpan/@w:val) + count(preceding-sibling::w:tc[not(w:tcPr/w:gridSpan)])"/></xsl:when><xsl:otherwise>0</xsl:otherwise></xsl:choose></xsl:variable><xsl:if test="w:tcPr/w:gridSpan"><xsl:variable name="declaredSpan"select="w:tcPr/w:gridSpan/@w:val"/><xsl:variable name="remainingCols"select="$totalCols - $precedingSpanSum"/><xsl:attribute name="number-columns-spanned"><xsl:choose><xsl:when test="$declaredSpan > $remainingCols"><xsl:value-of select="$remainingCols"/></xsl:when><xsl:otherwise><xsl:value-of select="$declaredSpan"/></xsl:otherwise></xsl:choose></xsl:attribute></xsl:if><!--修正的行合并逻辑--><xsl:if test="w:tcPr/w:vMerge[@w:val='restart']"><xsl:variable name="currentPos"select="count(preceding-sibling::w:tc) + 1"/><xsl:variable name="rowSpan"><xsl:call-template name="calculateRowSpan"><!--修正点1:直接取后续所有行--><xsl:with-param name="remainingRows"select="../following-sibling::w:tr"/><xsl:with-param name="position"select="$currentPos"/><xsl:with-param name="count"select="1"/></xsl:call-template></xsl:variable><xsl:attribute name="number-rows-spanned"><xsl:value-of select="$rowSpan"/></xsl:attribute></xsl:if><fo:block linefeed-treatment="ignore"white-space-collapse="true"><xsl:apply-templates select=".//w:p"/></fo:block></fo:table-cell></xsl:template><!--新增递归模板--><xsl:template name="calculateRowSpan"><xsl:param name="remainingRows"/><xsl:param name="position"/><xsl:param name="count"/><xsl:choose><!--修正点2:增加空行判断--><xsl:when test="count($remainingRows) = 0"><xsl:value-of select="$count"/></xsl:when><xsl:otherwise><xsl:variable name="currentRow"select="$remainingRows[1]"/><xsl:variable name="targetCell"select="$currentRow/w:tc[$position]"/><!--修正点3:处理单元格位置偏移--><xsl:variable name="precedingSpan"select="sum($currentRow/w:tc[position() < $position]/w:tcPr/w:gridSpan/@w:val)"/><xsl:choose><!--修正点4:精准定位合并目标单元格--><xsl:when test="$targetCell/w:tcPr/w:vMerge[@w:val='continue'] and ($position - $precedingSpan) <= count($currentRow/w:tc)"><xsl:call-template name="calculateRowSpan"><xsl:with-param name="remainingRows"select="$remainingRows[position() > 1]"/><xsl:with-param name="position"select="$position"/><xsl:with-param name="count"select="$count + 1"/></xsl:call-template></xsl:when><xsl:otherwise><xsl:value-of select="$count"/></xsl:otherwise></xsl:choose></xsl:otherwise></xsl:choose></xsl:template>这个行合并失效,一定要注意这是word的xml转xls-fo的xlst样式表,且xsl和xml版本均为1.0,请直接给出修改结果
03-11
<xsl:template match="w:tc"><fo:table-cell border="1pt solid black"padding="2pt"display-align="center"><!--列合并计算--><xsl:variable name="totalCols"select="count(ancestor::w:tbl/w:tblGrid/w:gridCol)"/><xsl:variable name="precedingSpanSum"><xsl:choose><xsl:when test="preceding-sibling::w:tc"><xsl:value-of select="sum(preceding-sibling::w:tc/w:tcPr/w:gridSpan/@w:val) + count(preceding-sibling::w:tc[not(w:tcPr/w:gridSpan)])"/></xsl:when><xsl:otherwise>0</xsl:otherwise></xsl:choose></xsl:variable><!--处理列跨距--><xsl:if test="w:tcPr/w:gridSpan"><xsl:variable name="declaredSpan"select="w:tcPr/w:gridSpan/@w:val"/><xsl:variable name="remainingCols"select="$totalCols - $precedingSpanSum"/><xsl:attribute name="number-columns-spanned"><xsl:choose><xsl:when test="$declaredSpan > $remainingCols"><xsl:value-of select="$remainingCols"/></xsl:when><xsl:otherwise><xsl:value-of select="$declaredSpan"/></xsl:otherwise></xsl:choose></xsl:attribute></xsl:if><!--行合并修正--><xsl:if test="w:tcPr/w:vMerge[@w:val='restart']"><xsl:variable name="currentPos"select="count(preceding-sibling::w:tc) + 1"/><xsl:variable name="rowSpan"><xsl:call-template name="calculateRowSpan"><xsl:with-param name="remainingRows"select="../../following-sibling::w:tr"/><xsl:with-param name="position"select="$currentPos"/><xsl:with-param name="count"select="1"/></xsl:call-template></xsl:variable><xsl:attribute name="number-rows-spanned"><xsl:value-of select="$rowSpan"/></xsl:attribute></xsl:if><fo:block linefeed-treatment="ignore"white-space-collapse="true"><xsl:apply-templates select=".//w:p"/></fo:block></fo:table-cell></xsl:template><!--行跨距计算模板--><xsl:template name="calculateRowSpan"><xsl:param name="remainingRows"/><xsl:param name="position"/><xsl:param name="count"/><xsl:choose><xsl:when test="count($remainingRows) = 0"><xsl:value-of select="$count"/></xsl:when><xsl:otherwise><xsl:variable name="currentRow"select="$remainingRows[1]"/><!--计算前导列跨距--><xsl:variable name="precedingSpan"select="sum($currentRow/w:tc[position() < $position]/w:tcPr/w:gridSpan/@w:val)"/><!--计算实际目标位置--><xsl:variable name="adjustedPos"select="$position - $precedingSpan"/><xsl:choose><xsl:when test="$currentRow/w:tc[$adjustedPos]/w:tcPr/w:vMerge[@w:val='continue']"><xsl:call-template name="calculateRowSpan"><xsl:with-param name="remainingRows"select="$remainingRows[position() > 1]"/><xsl:with-param name="position"select="$position"/><xsl:with-param name="count"select="$count + 1"/></xsl:call-template></xsl:when><xsl:otherwise><xsl:value-of select="$count"/></xsl:otherwise></xsl:choose></xsl:otherwise></xsl:choose></xsl:template>修改这段样式表,使表格的行合并单元格生效,一定要注意这是word的xml转xls-fo的xlst样式表,且xlst版本为1.0,请直接给出修改结果
最新发布
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值