我有一个包含以下数据的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 ......的链接,这样当点击它们时,它会在浏览器中显示时跳转到特定的参考位置。
答案 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输出
显然,您不必使用列表来构建链接,但我建议以某种方式构造它们,然后根据需要/想要使用CSS进行样式化。