XSL中count()的使用

本文介绍如何使用XSL中的count()函数来计算XML文件中特定节点的数量,并通过实例演示了如何获取list.xml文件中<node>节点的具体数目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XSL中用count()来取得xml中某种节点的个数
list.xml
<?xml version="1.0"?>
<list>
<application>
<id>1</id>
<state>1</state>
<type>111</type>
<title>title</title>
<applior>applior</applior>
<progress>
<node>
<state>pass</state>
<censor>admin</censor>
</node>
<node>
<state>failure</state>
<censor>kk</censor>
</node>
<node>
<state>detemind</state>
<censor>dq</censor>
</node>
</progress>
<applytime>2006-9-06</applytime>
<deadline>
<state>delay/ontime</state>
<time>2006-9-12</time>
</deadline>
</application>
</list>
要取得<node>节点的个数可以用的方法是
<xsl:value-of disable-output-escaping="yes" select="count(//node)"/>
路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)

http://www.cnblogs.com/cosy/archive/2006/09/21/510185.html
<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"> <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="targetCell" select="$currentRow/w:tc[$position]"/> <xsl:variable name="precedingSpan" select="sum($currentRow/w:tc[position() < $position]/w:tcPr/w:gridSpan/@w:val)"/> <xsl:choose> <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样式表,且xslxml版本均为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"><!--修正点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样式表,且xslxml版本均为1.0,请直接给出修改结果
最新发布
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值