1

我有以下xml:

<page>
   <link name="Index">index.jsp</link>
   <link name="Welcome">welcome.jsp</link>
</page>

我正在使用以下 xsl 文件来生成一个 html 文件:

....
<xsl:template match="/page/link" >
   <a href="{/page/link}" > <xsl:value-of select="@name" /> </a>
</xsl:template >

但是,这两个链接都将第一个子元素的值作为参考,因此两个链接都将用户带到 index.jsp

你们能给我一些建议吗,因为我是 XSLT 的新手。谢谢

4

2 回答 2

3

这是因为您在 AVT 中使用了绝对路径,这将导致匹配的第一个值。相反,请执行以下操作:

<xsl:template match="/page/link" >
   <a href="{.}" > <xsl:value-of select="@name" /> </a>
</xsl:template >
于 2013-10-19T07:07:04.673 回答
2

JLRishe已经给你答案了,我会尽力给你建议的!

编写 XSLT 代码时,请始终注意上下文。XPath 表达式选择相对于上下文。在带有 match="/page/link" 的模板规则中,上下文项是一个“链接”元素。当上下文项是一个链接元素时,/page/link 会上升到树的根部(因为最初的“/”)然后选择所有页面子项,然后选择它们的所有链接子项。这给了你所有的链接。

在 XSLT 1.0(您似乎正在使用)中,一个属性值模板{/page/link}将显示第一个链接。在 XSLT 2.0 中,它将显示所有选定的链接,以空格分隔。也不是你想要的。

于 2013-10-19T09:15:39.313 回答