2014-03-12 85 views
0

這裏是我的XSLT 1.0代碼:XSLT如果最後一個節點

<xsl:for-each select = "segment"> 
    <xsl:if test ="position() != 1 or position() != last()"> 
     <notfirstorlast></notfirstorlast>  
    </xsl:if> 
</xsl:for-each> 

這應該添加一個<notfirstorlast>元素,在所有<segment>節點怎樣exepct的第一個和最後一個。但它不工作。它將在沒有或聲明的情況下工作。 這個工程:

<xsl:if test ="position() != 1> 

某處有問題,我或陳述。

+3

你似乎永遠不會接受的答案,即使他們解決您的問題。在Stackoverflow上,說「謝謝」的一種方式是接受一個答案。在這裏,這意味着在答案的左側標記滴答,以便顯示爲綠色。謝謝! –

回答

6

這兩個條件必須得到滿足,所以你必須使用「和」,而不是「或」:

<xsl:if test ="position() != 1 and position() != last()"> 

某處有問題,我或陳述。

是的,正好。使用「或」,所有元素都符合notfirstorlast元素的條件,因爲所有元素都是「不是第一個」或「不是最後一個」元素。

輸入

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <segment/> 
    <segment/> 
    <segment/> 
</root> 

樣式

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
<xsl:output method="xml" indent="yes"/> 

<xsl:template match="/root"> 
    <xsl:for-each select = "segment"> 
    <xsl:copy> 
    <xsl:if test ="position() != 1 and position() != last()"> 
     <notfirstorlast></notfirstorlast>  
    </xsl:if> 
    </xsl:copy> 
</xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

輸出

<?xml version="1.0" encoding="utf-8"?> 
<segment/> 
<segment> 
    <notfirstorlast/> 
</segment> 
<segment/> 
相關問題