2011-04-14 98 views
0

我有一個稱爲ID的屬性,每當該值被分配給它時,它就會加1。我有一種情況,每次輸入循環時都會增加值。外部循環有2條記錄,內部循環有3條記錄。如何保留一個變量值並在XSLT中更新它

外環1 - 內環1,2,和3中,ID屬性被遞增爲1,2和3,但

外環2 - 內環....再次ID屬性開頭1.我需要這是4,5等......

此增量ID沒有與輸入XML文件相關的數據。所有的處理都必須在XSLT中完成。

XSLT文件:

<xsl:variable name="localISYMPid" select="0"/> 
<xsl:element name="Test1"> 

    <xsl:for-each select="Solutions/Solution"> 

     <xsl:if test="Observations/Observation!= '' "> 

      <xsl:for-each select="Observations/Observation"> 
       <xsl:element name="Roles"> 

        <!-- Generating the ID value --> 
        <xsl:variable name="ids" select="generate-id(.)"/> 
        <!-- ***************************--> 

        <xsl:attribute name="CK"><xsl:value-of select="substring-after($ids,'Solution')"/></xsl:attribute> 
        <xsl:attribute name="ID"><xsl:value-of select="position() + $localISYMPid "/></xsl:attribute> 
       </xsl:element> 
      </xsl:for-each> 
     </xsl:if> 
    </xsl:for-each> 
</xsl:element> 

請幫幫我在打印時內環環繞對於外環1的3倍和外環2和當內環爲1 ID 4的值, ID值應爲4個。截至目前,它的再次印刷1 ..

ID  1 
ID  2 
ID  3 
---------- 
ID  1(it should print 4) 

我使用XSLT 1.0

謝謝 拉姆

回答

0

您正在使用position()函數來確定其父元素(本例中爲Observation)的本地ID。如果你真的想要一個全球的節點,那麼你可以做一些像count(preceding::Roles) + 1這樣的事情,它會在當前節點之前統計所有Roles節點,然後添加一個節點。

您可能需要限制preceding::Roles謂詞遠一點根據您的要求,如preceding::Roles[parent::Observation]例如,要確保你只計算Roles元素是一個Observation元素的子元素。

2

顯示源文件總是有用的。但我懷疑你可以用類似

<xsl:attribute name="ID"> 
    <xsl:number level="any" from="Solution"/> 
</xsl:attribute> 
+0

+1這個特定任務的XSLT intruction得到你想要的結果。 – 2011-04-14 16:30:25

相關問題