我正在对XSLT
程序进行编码,该程序会将XML
转换为HTML
格式。我想向XSLT
添加页眉和页脚。这意味着我想在header.xslt
中添加footer.xslt
和content.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>
我想从两个不同的XSLT
文件显示页眉和页脚的内容,即 footer.xslt 和 header.xslt 。
如何将这两个xslt文件包含到content.xslt?我已尝试导入但未获得正确的结果。
谢谢:-)
答案 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 import
和include
元素的用途,但由于您已经在使用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>