2015-09-04 72 views
0

的價值觀我有一個XSLT的問題。當發票號碼不以字母「M」開頭時,我想總結所有小計值。我遇到的問題是我使用SUM函數,但我不知道如何給它提供條件。(XSLT)如何總結基於兄弟節點

我IF結構在過去的使用,但它們被用來產生像「456 + 415」的字符串,我需要一個求和數。

這裏是我想翻譯的XML:

<PriceSheets> 
    <PriceSheet> 
     <SubTotal>456</SubTotal> 
     <Settlement> 
      <InvoiceNumber>M1234567890</InvoiceNumber> 
     </Settlement> 
    </PriceSheet> 
     <SubTotal>415</SubTotal> 
     <Settlement> 
      <InvoiceNumber>1234567891</InvoiceNumber> 
     </Settlement> 
    <PriceSheet> 
    </PriceSheet> 
</PriceSheets> 

在這種情況下,我希望看到 「415」。任何幫助將不勝感激!

感謝

PS:我以前用

<xsl:value-of select="sum(PriceSheets/PriceSheet/SubTotal/text())" /> 

總結所有的值,但問題是,我需要尋找到結算/ InvoiceNumber節點之前我總結的值。

+0

似乎並不爲工作我要麼 –

回答

0

你的XML看起來無效,但假設每個PriceSheet有Settlment元素,和一個小計元素,那麼你會想這樣的:

<xsl:value-of 
    select="sum(PriceSheets/PriceSheet[substring(Settlement/InvoiceNumber, 1, 1)<>'M']/SubTotal/text())" /> 
0

要選擇在同級結算節點的invoicenumber沒有按」所有小計t以'M'開頭:

<xsl:value-of select="sum(//SubTotal[substring(../Settlement/InvoiceNumber, 1, 1) != 'M'])" /> 
0

謝謝大家的意見!我用你的例子來得到工作代碼!

sum(PriceSheets/PriceSheet[substring(Settlement/InvoiceNumber/text(), 1, 1) != 'M']/SubTotal/text()) 

我也嘗試別的東西,還曾:

<xsl:value-of select="sum(PriceSheets/PriceSheet[not(starts-with(Settlement/InvoiceNumber, 'M'))]/SubTotal/text())" /> 

上述這些問題都爲我工作!謝謝大家:)

+0

可以稍微通過刪除'文本()'表達和使用'開始,with'來檢查「M」簡化的表達。嘗試這種....'的' –

相關問題