如何将页眉和页脚XSLT文件添加到另一个XSLT文件以将其转换为HTML?

时间:2017-04-24 13:31:48

标签: html xml xslt xslt-1.0

我正在对XSLT程序进行编码,该程序会将XML转换为HTML格式。我想向XSLT添加页眉和页脚。这意味着我想在header.xslt中添加footer.xsltcontent.xslt

这是我的代码: XML文件 dataDetail.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="layout.xslt" type="text/xsl"?>
 <customerList>
    <customer id="101">
        <name>Jon</name>
        <email>Jon.sood@iqbsys.com</email>
        <age>23</age>
        <gender>male</gender>
    </customer>
</customerList>

这是我的主要xslt文件,即 layout.xslt

    <?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:import href="content.xslt" />
    <xsl:template match="/">
        <xsl:apply-imports />
    </xsl:template>
</xsl:stylesheet>

这是我的 content.xslt 文件:

 <?xml version="1.0"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <body>
                <h1>Header content</h1>
                <h2>=======start content==========</h2>
                <h2>The customer details are: </h2>
                <table border="1">
                    <tr bgcolor="#9acd32">
                        <th>Name</th>
                        <th>Email</th>
                        <th>Gender</th>
                    </tr>
                    <xsl:for-each select="customerList/customer">
                        <tr>
                            <td>
                                <xsl:value-of select="name" />
                            </td>
                            <td>
                                <xsl:value-of select="email" />
                            </td>
                            <td>
                                <xsl:value-of select="gender" />
                            </td>
                        </tr>
                    </xsl:for-each>
                </table>

                <h2>=======End content==========</h2>
                <h1>Footer content</h1>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

输出结果为: enter image description here

我想从两个不同的XSLT文件显示页眉和页脚的内容,即 footer.xslt header.xslt

如何将这两个xslt文件包含到content.xslt?我已尝试导入但未获得正确的结果。

谢谢:-)

1 个答案:

答案 0 :(得分:0)

  

如何将这两个xslt文件包含到content.xslt中?我尝试过导入但没有得到正确的结果。

您有两个主要问题需要解决。

首先,您需要在主要转换中显示单独的页眉和页脚样式表中定义的转换。您没有显示任何执行此操作的机制,但这并不难:您需要在主模板中的适当位置插入apply-templates元素。对页眉和页脚模板使用非默认模式可能很有用。例如,

<强> content.xslt

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <body>

                <!-- THIS: -->
                <xsl:apply-templates select="." mode="header" />

                <h2>=======start content==========</h2>
                <h2>The customer details are: </h2>
                <!-- ... -->
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

第二,您需要将外部文件中定义的模板合并到主文件中定义的样式表中。这是XSL importinclude元素的用途,但由于您已经在使用import,我想我不需要详细介绍。因此,看起来这可能适合您的方案:

<强> layout.xslt

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:import href="content.xslt" />
    <xsl:import href="header.xslt" />
    <xsl:import href="footer.xslt" />
</xsl:stylesheet>

请注意,此样式表中不需要模板;正在依赖进口的样式表来提供所需的一切。然后,您可以像这样编写标题样式表,例如:

<强> header.xslt

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <!-- note that this mode matches the one selected by the apply-templates
         in content.xslt: -->
    <xsl:template match="/" mode="header">
        <h1>Header Content</h1>
    </xsl:template>

</xsl:stylesheet>