2013-10-19 36 views
1

我有以下XML:爲什麼我的應用程序模板未在XSLT中的所有子項上生效?

<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的新手。謝謝

回答

3

這是因爲你在你的AVT中使用絕對路徑,這將導致匹配的第一個值。相反,這樣做:

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

非常感謝這個工作 – dhssa

2

JLRishe給了你答案,我會嘗試給出建議!

當您編寫XSLT代碼時,請始終注意上下文。 XPath表達式相對於上下文選擇。在匹配=「/ page/link」的模板規則中,上下文項是「鏈接」元素。當上下文項目是一個鏈接元素時,/ page/link上升到樹的根部(因爲初始的「/」),然後選擇所有的頁面子元素,然後選擇他們所有的子元素。這給你所有的鏈接。

在XSLT 1.0中(您似乎正在使用)屬性值模板(如{/page/link})將顯示第一個鏈接。在XSLT 2.0中,它將顯示所有選定的鏈接,以空格分隔。這也不是你想要的。

相關問題