2013-03-22 52 views
-1

我們如何實現以下邏輯。XSLT邏輯覆蓋一個臨時變量

UniqueID是臨時變量.PALLET_NUMBER來自輸入。

如果PALLET_NUMBER!= NULL,則

的UniqueID =子(PALLET_NUMBER,10)

如果PALLET_NUMBER = NULL,則

的UniqueID =子(CARTON_NUMBER,7)

我們可以得到來自上述兩個條件的UniqueID的值。這些事情發生在迭代循環中。我們如何覆蓋UniqueID臨時變量。

bacause後來有我們需要把像

<foreach> 
If previous UniqueID != current UniqueID then 

     <Some code> 
     <IF> 
</foreach> 
+1

你不能覆蓋變量XSLT – Treemonkey 2013-03-22 09:50:58

+1

此外,如果您發佈的XML輸入/ XSLT您嘗試使用,並希望輸出,我們可以提供更多的幫助。 – Treemonkey 2013-03-22 09:53:36

+0

XSLT是一種功能性語言,而不是程序性語言,您無法真正地從「迭代」和「變量」的角度思考,就像您可能習慣於其他語言一樣。如果您可以編輯您的問題以包含您的輸入樣本和期望的輸出,我們可以爲您提供關於如何以更實用的方式實現映射的一些指示。 – 2013-03-22 10:00:11

回答

1

你不能在XSLT覆蓋可變的條件。

您可能想查找xslt擴展函數來實現您的目標。

0

由於Treemonkey說,它不可能覆蓋變量,但像你描述使用遞歸可以實現的東西:

假設你有這樣的事情:

<xsl:for-each select="my/node/isNamed/something" /> 

你能做到這一點,而不是:

<xsl:variable name="items" select="my/node/isNamed/something" /> 
<xsl:apply-templates select="$items[1]"> 
    <xsl:with-param name="remainder" select="$items[position() > 1" /> 
</xsl:apply-templates> 

<!-- Separate template --> 
<xsl:template match="something"> 
    <xsl:param name="remainder" /> 
    <xsl:param name="lastId" /> 

    <xsl:variable name="uniqueId" select="..." /> 
    <!-- Contents of the xsl:for-each --> 

    <xsl:apply-templates select="$remainder[1]"> 
    <xsl:with-param name="remainder" select="$remainder[position() > 1]" /> 
    <xsl:with-param name="lastId" select="$uniqueId" /> 
    </xsl:apply-templates> 
</xsl:template>