如何使用XSLT进行3列输出?

时间:2013-12-06 11:56:27

标签: xslt xsl-fo

我的XML文件如下所示:

<platz>
  <platzdesc>
    <code>1</code>
    <name>Alle</name>
  </platzdesc>
  <platzdesc>
    <code>2</code>
    <name>Gold</name>
  </platzdesc>
</platz>

我需要编写XSLT文件来将此XML转换为3列输出。由于我不是很擅长XSLT,你可以帮助我,我已经尝试了各种各样的东西,但没有它们工作。输出不是HTML页面,而是PDF。

这是我到目前为止所尝试的内容:

<fo:block padding-before = "8pt" padding-start ="50pt">
  <xsl:for-each select="root/platz/platzdesc">
    <fo:block>
      <xsl:value-of select="concat(code,' - ', name)" />
    </fo:block>
  </xsl:for-each>
</fo:block>

我正在制定更好的解决方案,但欢迎您的帮助。

2 个答案:

答案 0 :(得分:3)

正如@Navin Ravat已经建议的那样,你可以使用一个表。

这是XSL-FO中表的一般结构:

<fo:table xmlns:fo="http://www.w3.org/1999/XSL/Format">
 <fo:table-column width="50mm"/>
 <fo:table-column width="50mm"/>
 <fo:table-column width="50mm"/>
 <fo:table-body>
  <fo:table-row>
     <fo:table-cell>
        <fo:block/>
     </fo:table-cell>
     <fo:table-cell>
        <fo:block/>
     </fo:table-cell>
     <fo:table-cell>
        <fo:block/>
     </fo:table-cell>
  </fo:table-row>
 </fo:table-body>
</fo:table>

上面是一个只有一行的简单示例表,当然可以添加更多。现在,您必须将此结构合并到XSLT样式表中。例如,像这样:

<xsl:element name="fo:table">
  <xsl:element name="fo:table-column">
    <xsl:attribute name="width">50mm</xsl:attribute>
  </xsl:element>
  <xsl:element name="fo:table-column">
    <xsl:attribute name="width">50mm</xsl:attribute>
  </xsl:element>
  <xsl:element name="fo:table-column">
    <xsl:attribute name="width">50mm</xsl:attribute>
  </xsl:element>
  <xsl:element name="fo:table-body">
    <xsl:element name="fo:table-row">
      <xsl:element name="fo:table-cell">
        <xsl:element name="fo:block">
          <xsl:value-of select="platz/platzdesc[code=2]"/>
        </xsl:element>
      </xsl:element>
    </xsl:element>
  </xsl:element>
</xsl:element>

答案 1 :(得分:-4)

经过许多痛苦之后,一种解决方案诞生了。享受!enter image description here

ZOOM,请看看它!