xml,xslt - 包含连续表数据内容

时间:2018-05-07 10:45:33

标签: html xml xslt

我需要从XML文档生成PDF文件。并且PDF应该在每个页面上都有页眉和页脚,并且在PDF的正文中应该有来自XML的表格数据,这些数据应该跨越页眉和页脚的页面

例如:

第1页

Header Contents :

Table :
Line 1
Line 2

Footer Contents :

第2页

Header Contents :

Table :
Line 3
Line 4

Footer Contents :

就像,我应该在每页的表格中显示有限的行。每页一页中只有2行,其中包含页眉和页脚内容。

请找到我的XML:

<receipt>
    <order>
        <page></page>
        <page>
            <line_number>1</line_number>
            <product_code>S10</product_code>
            <line_number>2</line_number>
            <product_code>S20</product_code>
        </page>
        <page>
            <line_number>3</line_number>
            <product_code>S92</product_code>
            <line_number>4</line_number>
            <product_code>S31</product_code>
        </page>
    </order>
</receipt>

请找到我的xsl样式表:

                                       xmlns:date =“http://exslt.org/dates-and-times”extension-element-prefixes =“date”&gt;     

    <xsl:template match="/receipt">
        <html>
            <head>
            <style>@page {size: a4 landscape;}</style>
            </head>
            <body>

                <table >
                    <thead>
                        <tr >
                            <th >Line</th>
                            <th>Item Code</th>
                        </tr>
                    </thead>
                <tbody>
                  <xsl:for-each select="order/page/line_number">
                            <tr style="font-size: 9px; ">
                                <td><xsl:value-of select="." /></td>
                                <td><xsl:value-of select="following-sibling::product_code[1]" /></td>
                            </tr>
                 </xsl:for-each>
                </tbody>
                </table>
                <br />

            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:2)

尝试以下代码。 为第一代tr元素添加<page>样式将按<tbody> <xsl:for-each select="order/page[exists(*)]"> <xsl:for-each-group select="*" group-adjacent="count(self::line_number|preceding-sibling::line_number)"> <xsl:variable name="pos" as="xs:integer" select="position()"/> <tr style="{concat('font-size: 9px;',if ($pos eq 1) then 'page-break-before:always;' else '')}"> <td> <xsl:value-of select="current-group()[1]"/> </td> <td> <xsl:value-of select="current-group()[2]"/> </td> </tr> </xsl:for-each-group> </xsl:for-each> </tbody> 元素拆分表。这将解决您的要求。

jsx