0

我正在使用 XSLT 将 XML 转换为 HTML。的输出应该有 2 个相互链接的 HTML 文件。在第一个 html 中将有一个数据列表,一旦我单击特定数据,我应该在其他 html 文件中获取该特定数据的详细信息。我需要为此使用 xslt。

我使用 Saxon 生成多个 html,但我能够执行链接功能。关于如何做到这一点的任何想法?

我的输入看起来像这样

<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>
4

1 回答 1

2

好吧,Saxon 9 或任何 XSLT 2.0 处理器都可以使用一个样式表生成多个结果文档,至于链接两个文档,这没有什么困难,您只需使用带有链接到另一个文档a的属性的 HTML 元素。href

如果您需要有关特定数据的帮助,请发布一个小而有代表性的 XML 输入示例以及您要创建的 HTML。

[编辑]

假设您有一个包含其中几个a:file元素的输入文档,并且您想要创建一个主 HTML 文档,列出所有a:names指向单独文件的链接,列出您可以解决的详细信息,如下所示:

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

未经测试,但应该给你一个想法。如果您需要更多帮助,请显示您的输入和所需输出的更多详细信息,我必须制作主要 HTML 结果(在此处使用列表)和详细信息文件(在此处使用表格)的格式。

[编辑 2] 假设完整的输入样本是

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

完整的样式表示例是

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

然后当我从命令行使用 Saxon 9.4 HE 时,java -jar saxon9he.jar input.xml sheet.xsl -o:result.html我得到两个结果文件,当然主要是result.html,另一个33.html如下所示:

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Example</title>
   </head>
   <body>
      <h1>Data list</h1>
      <ul>
         <li><a href="33.html">hello</a></li>
      </ul>
   </body>
</html>




<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Details of hello</title>
   </head>
   <body>
      <table>
         <thead>
            <tr>

               <th>id</th>

               <th>name</th>

               <th>school</th>

               <th>marks</th>

            </tr>
         </thead>
         <tbody>
            <tr>

               <td>33</td>

               <td>hello</td>

               <td>mumbai public</td>

               <td>80</td>

            </tr>
         </tbody>
      </table>
   </body>
</html>

因此,就文件数量以及浏览器内部的链接而言,这对我来说都很好。

于 2012-06-11T10:09:29.827 回答