多个html作为输出和一个xsl

时间:2012-06-11 10:02:20

标签: html xml xslt hyperlink

我正在使用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>

1 个答案:

答案 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

这对我来说很合适,无论是涉及文件的数量还是浏览器内的链接工作。