会 员 登 录
热 门 文 章
相 关 文 章
- 没有文章
Tags(标签)
用XSL把XML的数据转换成完美的多列表格形式
<xsl:variable name="varStep" select="2"/>
<xsl:template match="/">
<xsl:call-template name="MyLoopFun">
<xsl:with-param name="varStart" select="$varStart">
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="MyLoopFun">
<xsl:param name="varStart"/>
<xsl:if test="$varStart < $varEnd">
<!-- 输出格式定义 -->
<a target="_blank" href="http://xml.sz.luohuedu.net/?{$varStart}">
<xsl:attribute name="title"><xsl:value-of select="$varStart"/></xsl:attribute>
<xsl:value-of select="$varStart"/>
</a>
<xsl:if test="$varStart < ($varEnd - $varStep)"> , </xsl:if>
<xsl:call-template name="MyLoopFun">
<xsl:with-param name="varStart">
<xsl:value-of select="$varStart + $varStep"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
理解了上面的原理之后,下面就是我们最后的代码,程序已经做了注释:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:copyRight="http://xml.sz.luohuedu.net/">
<xsl:template match="/">
<!-- 定义常量 -->
<xsl:variable name="strTrLeft" select="'<tr>'"/>
<xsl:variable name="strTrRight" select="'</tr>'"/>
<!-- 计算总记录数 -->
<xsl:variable name="nTotal" select="count(/Items/Item)"/>
<!-- 定义列数 -->
<xsl:variable name="nCols" select="3"/>
<!-- 计算需要的补齐的列数 -->
<xsl:variable name="nLefted" select="$nCols - ($nTotal mod $nCols)"/>
<!-- 计算不需要补齐的行数 -->
<xsl:variable name="nNotProcessedRow" select="$nTotal - ($nTotal mod $nCols)"/>
<table bgcolor="snow" border="1" cellpadding="5" cellspacing="2" borderColor="darkorange"
style="font-size:9pt">
<!-- 对于不需要补齐的行数,直接输出 -->
<xsl:for-each select="/Items/Item[position() < $nNotProcessedRow +1]">
<xsl:if test="position() mod $nCols = 1">
<xsl:value-of select="$strTrLeft" disable-output-escaping="yes"/>
</xsl:if>
<td>
<a target="_blank">
<xsl:template match="/">
<xsl:call-template name="MyLoopFun">
<xsl:with-param name="varStart" select="$varStart">
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="MyLoopFun">
<xsl:param name="varStart"/>
<xsl:if test="$varStart < $varEnd">
<!-- 输出格式定义 -->
<a target="_blank" href="http://xml.sz.luohuedu.net/?{$varStart}">
<xsl:attribute name="title"><xsl:value-of select="$varStart"/></xsl:attribute>
<xsl:value-of select="$varStart"/>
</a>
<xsl:if test="$varStart < ($varEnd - $varStep)"> , </xsl:if>
<xsl:call-template name="MyLoopFun">
<xsl:with-param name="varStart">
<xsl:value-of select="$varStart + $varStep"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
理解了上面的原理之后,下面就是我们最后的代码,程序已经做了注释:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:copyRight="http://xml.sz.luohuedu.net/">
<xsl:template match="/">
<!-- 定义常量 -->
<xsl:variable name="strTrLeft" select="'<tr>'"/>
<xsl:variable name="strTrRight" select="'</tr>'"/>
<!-- 计算总记录数 -->
<xsl:variable name="nTotal" select="count(/Items/Item)"/>
<!-- 定义列数 -->
<xsl:variable name="nCols" select="3"/>
<!-- 计算需要的补齐的列数 -->
<xsl:variable name="nLefted" select="$nCols - ($nTotal mod $nCols)"/>
<!-- 计算不需要补齐的行数 -->
<xsl:variable name="nNotProcessedRow" select="$nTotal - ($nTotal mod $nCols)"/>
<table bgcolor="snow" border="1" cellpadding="5" cellspacing="2" borderColor="darkorange"
style="font-size:9pt">
<!-- 对于不需要补齐的行数,直接输出 -->
<xsl:for-each select="/Items/Item[position() < $nNotProcessedRow +1]">
<xsl:if test="position() mod $nCols = 1">
<xsl:value-of select="$strTrLeft" disable-output-escaping="yes"/>
</xsl:if>
<td>
<a target="_blank">
附件:
没有附件
0
票
顶一下
票
顶一下
0
票
踩一下
票
踩一下
| 文 章 评 论 | ||||||||
| ||||||||



您现在的位置: