我正在使用XSLT将XML转换为HTML。 输出应该有2个HTML文件相互链接。 在第一个html中将有一个数据列表,一旦我点击特定数据,我应该在其他html文件中获取该特定数据的详细信息。我需要使用xslt。
我使用Saxon生成多个htmls但我能够执行链接功能。关于如何做到这一点的任何想法?
我的输入看起来像这样
<a:file>
<a:id>33</a:id>
<a:name>hello</a:name>
<a:school>mumbai public</a:school>
<a:marks>80</a:marks>
</a:file>
答案 0 :(得分:2)
Saxon 9或任何XSLT 2.0处理器可以使用一个样式表生成多个结果文档,至于链接两个文档没有什么困难,你只需使用带有{{1}的HTML a
元素}链接到另一个文档的属性。
如果您需要有关特定数据的帮助,请发布一个小而有代表性的XML输入示例以及您要创建的HTML。
[编辑]
假设您有一个带有几个href
元素的输入文档,并且您想创建一个主HTML文档,列出所有a:file
链接到单独的文件,列出您可以解决的详细信息,如下所示:
a:names
未经测试但应该给你一个想法。如果您需要更多帮助,请显示您输入和想要输出的更多详细信息,我必须构成主要HTML结果(在那里使用列表)和详细信息文件(在那里使用表格)的格式。
[编辑2] 假设完整的输入样本是
<xsl:template match="/">
<xsl:apply-templates select="//a:file" mode="doc"/>
<html>
<head>
<title>Example</title>
</head>
<body>
<h1>Data list</h1>
<ul>
<xsl:apply-templates select="//a:file"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="a:file">
<li>
<a href="{a:id}.html">
<xsl:value-of select="a:name"/>
</a>
</li>
</xsl:template>
<xsl:template match="a:file" mode="doc">
<xsl:result-document href="{a:id}.html">
<html>
<head>
<title>Details of <xsl:value-of select="a:name"/></title>
</head>
<body>
<table>
<thead>
<tr>
<xsl:apply-templates mode="thead"/>
</tr>
</thead>
<tbody>
<tr>
<xsl:apply-templates mode="doc"/>
</tr>
</tbody>
</table>
</body>
</html>
</xsl:result-document>
</xsl:template>
<xsl:template match="a:file/*" mode="doc">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="a:file/*" mode="thead">
<th>
<xsl:value-of select="local-name()"/>
</th>
</xsl:template>
,完整的样式表示例
<a:files xmlns:a="http://example.com/a">
<a:file>
<a:id>33</a:id>
<a:name>hello</a:name>
<a:school>mumbai public</a:school>
<a:marks>80</a:marks>
</a:file>
</a:files>
然后当我从命令行使用Saxon 9.4 HE时,例如<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="http://example.com/a"
exclude-result-prefixes="a"
version="2.0">
<xsl:template match="/">
<xsl:apply-templates select="//a:file" mode="doc"/>
<html>
<head>
<title>Example</title>
</head>
<body>
<h1>Data list</h1>
<ul>
<xsl:apply-templates select="//a:file"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="a:file">
<li>
<a href="{a:id}.html">
<xsl:value-of select="a:name"/>
</a>
</li>
</xsl:template>
<xsl:template match="a:file" mode="doc">
<xsl:result-document href="{a:id}.html">
<html>
<head>
<title>Details of <xsl:value-of select="a:name"/></title>
</head>
<body>
<table>
<thead>
<tr>
<xsl:apply-templates mode="thead"/>
</tr>
</thead>
<tbody>
<tr>
<xsl:apply-templates mode="doc"/>
</tr>
</tbody>
</table>
</body>
</html>
</xsl:result-document>
</xsl:template>
<xsl:template match="a:file/*" mode="doc">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="a:file/*" mode="thead">
<th>
<xsl:value-of select="local-name()"/>
</th>
</xsl:template>
</xsl:stylesheet>
我得到两个结果文件,主要是java -jar saxon9he.jar input.xml sheet.xsl -o:result.html
,另一个是result.html
,如下所示:
33.html
这对我来说很合适,无论是涉及文件的数量还是浏览器内的链接工作。