【问题标题】:XSLT Generate Dynamic Columns for Apache FOPXSLT 为 Apache FOP 生成动态列
【发布时间】:2013-06-15 06:51:43
【问题描述】:

我需要制作一个包含 3 列区域的动态表格

举个例子更好: 不知道你会不会明白,不过“----”只是为了格式化帖子中的表格

|--编号--|--文档--|--状态-------|--编号--|--文档--|--状态------ ---|--编号--|--文档--|--状态--| |--11-----|1111- |-- _____________------|--22------- |2222 --|______________---- ------|---- 33----- |3333- | _______________|

|--44----- |4444- |-- _____________ -------- |------------|------ ----|------------|---------|--------------|--------- |------------|

我的 XML:

    <Details>
      <Detail>
        <Number>11</Number> 
        <Doc>1111</Doc>
      </Detail>
      <Detail>
        <Number>22</Number> 
        <Doc>2222</Doc> 
      </Detail>
      <Detail>
        <Number>33</Number> 
        <Doc>3333</Doc> 
      </Detail>
      <Detail>
        <Number>44</Number> 
        <Doc>4444</v> 
      </Detail>
    </Details>

我试图像下面的帖子那样做,但我做不到。 XSLT Generate Dynamic Rows and Columns for Apache FOP

【问题讨论】:

    标签: xslt apache-fop


    【解决方案1】:

    这是递归的一种方式,我没有添加“FO”命名空间,但你应该能够使用它到达那里。如果您愿意,还可以添加一个测试来填充空单元格。

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output indent="yes"/>
    <xsl:template match="Details">
       <table>
        <xsl:call-template name="rows">
            <xsl:with-param name="Details" select="*"/>
        </xsl:call-template>
       </table>
    </xsl:template>
    <xsl:template name="rows">
        <xsl:param name="Details"/>
        <row>
            <xsl:apply-templates select='$Details[position() &lt; 4]/*'/>
        </row>
        <xsl:if test="$Details[4]">
            <xsl:call-template name="rows">
                <xsl:with-param name="Details" select="$Details[position() &gt; 3]"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
    <xsl:template match="Number | Doc">
        <cell>
            <xsl:value-of select="."/>
        </cell>
    </xsl:template>
    </xsl:stylesheet>
    

    使用上面的 XML 输出是这样的(我添加了一些更多的 Detail 元素以确保一切正常):

    <?xml version="1.0" encoding="utf-8"?>
    <table>
      <row>
          <cell>11</cell>
          <cell>1111</cell>
          <cell>22</cell>
          <cell>2222</cell>
          <cell>33</cell>
          <cell>3333</cell>
       </row>
       <row>
          <cell>44</cell>
          <cell>4444</cell>
          <cell>5</cell>
          <cell>55</cell>
          <cell>6</cell>
          <cell>66</cell>
       </row>
       <row>
          <cell>7</cell>
          <cell>777</cell>
       </row>
     </table>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      相关资源
      最近更新 更多