当前位置: 代码迷 >> XML/SOAP >> xsl生成多列列表,该如何处理
  详细解决方案

xsl生成多列列表,该如何处理

热度:8954   发布时间:2013-02-26 00:00:00.0
xsl生成多列列表
xml中有一个图像的列表,想用XSLT生成FO:table的列表,每行三个,XSLT如何控制每满三个添加一行?

------解决方案--------------------------------------------------------
本帖最后由 net_lover 于 2013-02-16 18:54:27 编辑
可参考这个例子
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
   <!-- 定义常量 -->
    <xsl:variable name="strTrLeft" select="'&lt;tr&gt;'"/>
    <xsl:variable name="strTrRight" select="'&lt;/tr&gt;'"/>
    <!-- 计算总记录数 -->
    <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() &lt; $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:attribute name="href">
        <xsl:if test="contains(Url,'@')">mailto:</xsl:if><xsl:value-of select="Url"/></xsl:attribute>
      <xsl:value-of select="Title"/>
    </a>
        </td>
        <xsl:if test="position() mod $nCols = 0">
          <xsl:value-of select="$strTrRight" disable-output-escaping="yes"/>
        </xsl:if>
      </xsl:for-each>
      <!-- 转换除去不需要补齐的记录的剩余记录 -->
      <xsl:if test="$nLefted != 0 and $nLefted != $nCols">
        <xsl:value-of select="$strTrLeft" disable-output-escaping="yes"/>
        <xsl:for-each select="/Items/Item[position() &gt;$nNotProcessedRow]">
          <td>
    <a target="_blank">
      <xsl:attribute name="href">
        <xsl:if test="contains(Url,'@')">mailto:</xsl:if><xsl:value-of select="Url"/></xsl:attribute>
  相关解决方案