为什么我的app-template在XSLT中没有对其所有子项生效?

时间:2013-10-19 06:12:51

标签: html xml xslt

我有以下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的新手。感谢

2 个答案:

答案 0 :(得分:3)

这是因为您在AVT中使用绝对路径,这将导致第一个值匹配。相反,这样做:

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

答案 1 :(得分:2)

JLRishe给了你答案,我会尝试给出建议!

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

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