在xslt中创建内部链接,以便在链接上单击时移动到特定位置

时间:2015-01-12 12:30:39

标签: xml xslt

我有一个包含以下数据的xml

<Report>
<Reference Num="1">
<Error>xyz</Error>
</Reference>
<Reference Num="2">
<Error>abc</Error>
</Reference>
<Reference Num="3">
<Error>pqr</Error>
</Reference>
</Report>
在上面的例子中,

考虑了1000个引用,这实际上就是我的情况

我创建了一个xsl,以表格的形式顺序显示它们。

<xsl:template match="/">
    <html>
      <body >
        <table>     
            <xsl:call-template name="ReferenceList">
            </xsl:call-template>
        </table>
      </body>
    </html>
  </xsl:template>
  <xsl:template name="ReferenceList">
    <xsl:for-each select="/Report/Reference">
        <br></br>
        <tr style="background-color: #000066; color: white;">
            <td  style="text-align:center;"> Reference </td>
            <td>ERROR</td>
        </tr>
        <tr>
            <td>
                Reference<xsl:value-of select="@Num"></xsl:value-of>
            </td>
            <td>
                <xsl:value-of select="ERROR"></xsl:value-of>
            </td>
        </tr>
    </xsl:for-each>
  </xsl:template> 

我想在页面顶部创建名称为ref1,ref2,ref3 ......的链接,这样当点击它们时,它会在浏览器中显示时跳转到特定的参考位置。

1 个答案:

答案 0 :(得分:1)

我认为您只想使用模式处理节点两次:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="html" indent="yes" />

   <xsl:template match="/">
    <html>
      <body >
        <div class="reference">
          <ul>
            <xsl:apply-templates select="Report/Reference" mode="links"/>
          </ul>
        </div>
        <table> 
            <thead>
              <tr style="background-color: #000066; color: white;">
                <th > Reference </th>
                <th>ERROR</th>
               </tr>
            </thead>
            <tbody>    
            <xsl:apply-templates select="Report/Reference"/>
            </tbody>
        </table>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="Report/Reference">
        <tr id="ref{position()}">
            <td>
                <xsl:text>Reference</xsl:text>
                <xsl:value-of select="@Num"/>
            </td>
            <td>
                <xsl:value-of select="Error"/>
            </td>
        </tr>
  </xsl:template> 

  <xsl:template match="Report/Reference" mode="links">
    <li>
      <a href="#ref{position()}">Ref<xsl:value-of select="position()"/></a>
    </li>
  </xsl:template>

</xsl:transform>

呈现HTML输出

  

enter image description here

显然,您不必使用列表来构建链接,但我建议以某种方式构造它们,然后根据需要/想要使用CSS进行样式化。