2012-06-29 37 views
1

有列表使用xsl:數前前後後如果

<nodes> 
<node attr='1'/> 
<node attr='0'/> 
<node attr='1'/> 
<node attr='1'/> 
</nodes> 

我需要應用模板的所有節點又算什麼呢:

<xsl:apply-templates select='nodes/node'> 
<xsl:if test='@attr=1'> 
<xsl:number/> 
</xsl:if> 
</xsl:apply-templates> 

但結果HAZ沒有123,結果是134。如何解決它在xslt-1.0?還有另一種方法來設置它的數字?位置()忍不住了,

<xsl:apply-templates select='nodes/node[@attr=1]'> 
<xsl:if test='@attr=1'> 
<xsl:number/> 
</xsl:if> 
</xsl:apply-templates> 

不由=(((

+0

要打印的號碼是多少?在XML上,沒有與123或134相關的數字 –

+0

不知道你爲什麼想要123,或者它會表明什麼? – Woody

+0

你想對XPath'nodes/node [@ attr = 1]找到的元素有一個遞增索引,對嗎? –

回答

2

首先,你在你的XSLT

有一個錯誤
<xsl:apply-templates select='nodes/node'> 
    <xsl:if test='@attr=1'> <xsl:number/>  
    </xsl:if> 
</xsl:apply-templates> 

你不能有一個XSL:如果內的XSL:申請模板。你需要一個匹配的xsl:模板並把代碼中有...

<xsl:apply-templates select="nodes/node" /> 

<xsl:template match="node"> 
    <xsl:if test='@attr=1'> 
     <xsl:number/>  
    </xsl:if> 
<xsl:template> 

事實上,你可以用XSL做掉:如果這裏了,只是在模板匹配測試

<xsl:template match="node[@attr=1]"> 
    <xsl:number/>  
<xsl:template> 

但是,爲了回答你的問題,你可能需要使用計數屬性上的xsl:數元來算只有你想要

元素
<xsl:number count="node[@attr=1]"/> 

以下是完整的XSLT

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

    <xsl:template match="/"> 
     <xsl:apply-templates select="nodes/node"/> 
    </xsl:template> 

    <xsl:template match="node[@attr=1]"> 
     <xsl:number count="node[@attr=1]"/> 
    </xsl:template> 

    <xsl:template match="node"/> 
</xsl:stylesheet> 

當適用於您的XML,結果是123

2

這是說123 - 這是你所追求的

<xsl:for-each select="nodes/node[@attr='1']"> 
    <xsl:value-of select="position()"/> 
</xsl:for-each> 
+0

是否可以用來實現? – unclenorton

0

這是不太清楚是什麼?我想你需要計算屬性設置爲1的節點數。在這種情況下,使用count函數:

<xsl:value-of select="count(nodes/node[@attr='1'])" /> 

如果你需要輸出所需的節點的匹配條件子集內的位置,然後for-each很可能是要走的路:

<xsl:for-each select="nodes/node[@attr='1']"> 
    <xsl:value-of select="position()" /> 
</xsl:for-each> 
+0

但是,這會給你3,而我認爲他們似乎想要123.不,我不知道爲什麼? – Woody

+0

@Woody:123就像編號匹配的節點。即第一匹配節點具有數字1,第二匹配節點具有數字2,依此類推。即同樣的東西,你可以在方括號中指定表示你想找回哪一個找到的節點。 –

+0

一致認爲有可能需要對節點進行編號的原因,但在實際問題中沒有很好地描述。 – Woody