【问题标题】:How to make 3 column output using XSLT?如何使用 XSLT 进行 3 列输出?
【发布时间】:2013-12-23 18:25:36
【问题描述】:

我的 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>

我正在研究一个更好的解决方案,但欢迎您的帮助。

【问题讨论】:

  • 您能否展示一个您想要生成的 XML 示例(实际的 XSL-FO XML 标记)和迄今为止您尝试过的 XSLT?
  • 你应该使用 fo:table 格式来获得输出到多个列中。
  • @NavinRawat - 你能更准确一点吗?
  • 对于代码,请发布文本,而不是图像。

标签: xslt xsl-fo


【解决方案1】:

在经历了很多痛苦之后,一个解决方案诞生了。享受吧!

请放大查看!

【讨论】:

  • 看起来您使用了@Mathias 答案。如果是这样,您应该考虑用绿色复选标记标记他的答案,以表明他能够回答您的问题。此外,您的问题和答案需要包含文本而不是图像代码,否则您的问题可能会因为不包含必要的信息而被关闭。
  • 好吧,如果我使用 Mathias 解决方案,它会和我的一样,至少在逻辑上不是这样。 Mathias 解决方案不能动态打印行,它是固定的,也就是不太理想。
  • 我想说,这与可取性无关。您没有透露问题背后的意图,因此我的回答是一般性的。无论如何,如果我的回答对您有帮助(即让您走上正轨),请将其标记为答案。或者,标记您自己的答案,从而结束问题。
  • @MathiasMüller - 我试图将我自己的答案标记为正确,但它不会让我接受我自己的答案需要 2 天时间。请不要感到被冒犯,我只是说动态总是比固定解决方案更可取,仅此而已,谢谢,您确实帮助了我
  • 该图像无法读取。能否请您用文本形式的实际代码替换它?
【解决方案2】:

正如@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>

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多