2011-03-17 135 views
0

我有筆記列表,像這樣:如何使用XSLT跳過列表中的第一種元素?

<Notes> 
    <Note> 
     <Type>Internal</Type> 
     <Value>STuff</Value> 
    </Note> 
    <Note> 
     <Type>External</Type> 
     <Value>Other stuff</Value> 
    </Note> 
    <Note> 
     <Type>External</Type> 
     <Value>Even More stuff</Value> 
    </Note> 
</Notes> 

我需要列出外部音符,但跳過第一外部註釋。更糟糕的是,我不能總是保持內部音符的存在,所以我不一定知道第一個外部音符的位置。所以我想我需要找到第一個外部音符的位置,並將其存儲在一個變量中,然後在測試中使用它。但不知道如何用變量來做到這一點?

回答

1

所以我想我需要找到第一外部音符的位置 ,並存儲 在一個變量,然後使用在 測試。

不,您可以使用position()。如何:

<xsl:template match="Notes"> 
    <xsl:apply-templates select="Note[Type = 'External'][position() &gt; 1]" /> 
</xsl:template> 

<xsl:template match="Note[Type = 'External']"> 
    <!-- now do something with that node --> 
    <xsl:copy-of select="." /> 
</xsl:template> 
+0

我不知道你可以這樣做......謝謝! – CodeRedick 2011-03-17 19:00:21

+0

這將是推式。 – 2011-03-17 19:02:55

+0

有點冗長,因爲一旦你選擇了節點,其他節點將不會被應用。所以,不需要空的規則,並且可以減少另一個規則中的模式。 – 2011-03-17 19:10:03

1

選擇包含External型第二<Note>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="Notes/Note[Type='External'][position()&gt;1]"> 
     <xsl:apply-templates select="Value"/> 
    </xsl:template> 
    <!-- suppress --> 
    <xsl:template match="Note"/> 
</xsl:stylesheet> 

,它輸出時應用到你的示例XML如下:

Even More stuff 
+1

這將是拉風格,但是缺少其他'Note'的空規則......並且,不需要在屬性值中編碼'>'字符。 – 2011-03-17 19:04:03

相關問題