簡體   English   中英

XSLT:從for-each循環中獲取計數總和

[英]XSLT: Get sum of count from for-each loop

我有一個XSLT程序,試圖從for-each循環中獲取計數的總和。 但是它只返回最后一個循環的總和。 請找到下面的部分XSLT

<xsl:for-each select = "/PURCHASE_ORDER_DISPATCH/MsgData/Transaction/PO_POD_HDR_EVW1/PO_ID">
    <xsl:variable name = "N1Count" select = "count(..)"/>
    <xsl:variable name = "PO1Count" select = "count(../PO_POD_LN_EVW1)"/>

    <xsl:variable name = "TotalSeg">
        <xsl:value-of select = "normalize-space((2 * $N1Count) + $PO1Count)" 
                                xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"/>
    </xsl:variable>

    <EDI_TXN_850P.VERSION_1:EDI_FLD_96>
        <xsl:value-of select="normalize-space($TotalSeg + 5.0)"/>
    </EDI_TXN_850P.VERSION_1:EDI_FLD_96>
</xsl:for-each>

基本上在上面的for-each循環中,我獲取N1和PO1的計數,然后經過一些計算,嘗試將(((2 * $ N1Count)+ $ PO1Count))分配給$ TotalSeg變量。 問題在於它僅獲得最新/最近的循環。

例如,如果我有兩個循環要經過,假設$ N1Count = 2,$ PO1Count = 3在第一個循環中,$ N1Count = 2,$ PO1Count = 5在第二個循環中,$ TotalSeg僅被分配(((2 * 2)+ 5)= 9(第二個循環值),而不是(((2 * 4)+ 8)= 16(所有值的總和)。

我如何使用XSLT做到這一點。

謝謝

您不想在循環內使用count() 它將已經計算出一個樹片段中的所有實例,因此您可以不進行循環:

<xsl:variable name = "TotalSeg">
    <xsl:value-of select = 
       "normalize-space((2 * 
        count(/PURCHASE_ORDER_DISPATCH/MsgData/Transaction/PO_POD_HDR_EVW1)) + 
        count(/PURCHASE_ORDER_DISPATCH/MsgData/Transaction/PO_POD_HDR_EVW1/PO_POD_LN_EVW1))
       "
    />
</xsl:variable>

<EDI_TXN_850P.VERSION_1:EDI_FLD_96>
    <xsl:value-of select="normalize-space($TotalSeg + 5.0)"/>
</EDI_TXN_850P.VERSION_1:EDI_FLD_96>

首先,count(..)總是返回1,因為您選擇的節點始終只有一個父節點。

其次,這是一種功能性語言,因此您無法在循環中遞增值。 如果您不明白,請閱讀。

您需要在for-each循環之外的表達式,例如

select="2*count(XXXX) + count(/PURCHASE_ORDER_DISPATCH/MsgData/Transaction/PO_POD_HDR_EVW1/PO_POD_LN_EVW1)"

但我不知道您打算對XXXX計入什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM