如何让XSL模板不为每条记录重复表?

时间:2016-08-10 17:49:31

标签: html xml xslt

模板显示从数据库生成的数据集。数据集中有很多行。

对数据集中的每一行执行

<xsl:template match="Photos">。数据集中的每一行都有一个图像。

我只想重复<td id="tdImage">,但其余的只能执行一次。

这样做的目的是让图像水平显示,而不是垂直显示。

what it looks now

 <xsl:template match="Photos">

<table width = "600">

  <tr style="width:600;">
    <xsl:if test =  "SequenceNumber=1" >
      <td colspan ="5" class ="input">Photos:</td>
    </xsl:if>
  </tr>

  <tr style="width:600;">


        <td id="tdImage">
          <table width ="150">

            <tr>
              <td style ="padding-left:15px">
                <table width ="150">
                  <tr style="width:150px;">
                    <td style="width:135px;">
                      <a href = '{src}'  style="font-size:10px;">
                        <xsl:value-of select="FileName"/>
                      </a>

                    </td>
                  </tr>
                  <tr style="width:150px;">
                    <td  style="width:150px;">

                      <img  type = "hidden"  Width="75" Height="75" src='{src}' />

                    </td>

                  </tr>


                </table>

              </td>
            </tr>
          </table>
        </td>

    </tr>

</table>

提前致谢!

编辑:数据集的示例

    SequenceNumber    |    FileName    |               src
    ---------------------------------------------------------------------
          1           |   flowers.jpg  |   blabla.ashx?SequenceNumber=1
          2           |   light.jpg    |   blabla.ashx?SequenceNumber=2
          3           |   garden.jpg   |   blabla.ashx?SequenceNumber=3
          4           |   candy.jpg    |   blabla.ashx?SequenceNumber=4

1 个答案:

答案 0 :(得分:0)

我不确定我能给出一个确切的答案,但作为初学者,您可能希望有一个与主数据集(所有Photos元素的父元素)匹配的模板,您可以在其中构建表格行。

如果你只是想展示前4个,你可以从这开始......

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="/*">
        <table>
            <tr>
                <td colspan="4">Photos:</td>
            </tr>
            <tr>
                <xsl:apply-templates select="Photos[position() &lt; 5]" />
            </tr>
        </table>
    </xsl:template>

    <xsl:template match="Photos">
        <td>
            <a href = '{src}'  style="font-size:10px;">
                <xsl:value-of select="FileName"/>
            </a>
            <br />
            <img Width="75" Height="75" src='{src}' />
        </td>
    </xsl:template>
</xsl:stylesheet>

注意我已经简化了“照片”模板,因为实际上不推荐嵌套在表格中的表格。

另一方面,如果您有超过4张照片并且想要每行显示4张照片,您可以选择每行开头显示的第一张照片(即位置1,5,9的照片,等),然后从每一个中建立一行。

尝试这个XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="/*">
        <table>
            <tr>
                <td colspan="4">Photos:</td>
            </tr>
            <xsl:for-each select="Photos[position() mod 4 = 1]">
                <tr>
                    <xsl:apply-templates select="self::*|following-sibling::Photos[position() &lt; 4]" />
                </tr>
            </xsl:for-each>
        </table>
    </xsl:template>

    <xsl:template match="Photos">
        <td>
            <a href = '{src}'  style="font-size:10px;">
                <xsl:value-of select="FileName"/>
            </a>
            <br />
            <img Width="75" Height="75" src='{src}' />
        </td>
    </xsl:template>
</xsl:stylesheet>