2017-02-23 69 views
0

我想根據節點中的相關信息來總結一個值列表。相關信息是兩條信息的組合(以下列爲IDa和IDb)。基於多個相關節點對xml節點求和的最簡單方法是什麼?

我有一個這樣的輸入例如:

<root> 
<node> 
    <IDa>SG</IDa> 
    <IDb>01</IDb> 
    <value>4</value> 
</node> 
<node> 
    <IDa>SG</IDa> 
    <IDb>01</IDb> 
    <value>2</value> 
</node> 
<node> 
    <IDa>SG</IDa> 
    <IDb>02</IDb> 
    <value>3</value> 
</node> 
<node> 
    <IDa>BA</IDa> 
    <IDb>01</IDb> 
    <value>1</value> 
</node> 
<node> 
    <IDa>BA</IDa> 
    <IDb>01</IDb> 
    <value>4</value> 
</node> 
</root> 

我想要得到這樣的輸出:

SG01 4

SG01 2

共6

SG02 3

TOTAL 3

BA01 1

BA01 4

TOTAL 5

+1

這是一個*分組*問題。做一個搜索 - 這可能是最經常被問到的XSLT問題。請注意,對於XSLT 1.0或2.0,答案是不同的。 –

回答

1

最簡單的方法是使用XSLT 3.0和for-each-groupcomposite分組鍵:

<xsl:output method="text"/> 

<xsl:template match="root"> 
    <xsl:for-each-group select="node" composite="yes" group-by="IDa, IDb"> 
     <xsl:value-of select="current-group()!(IDa || ' ' || IDb || ': ' || value), 'Total: ' || sum(current-group()/value)" separator="&#10;"/> 
     <xsl:text>&#10;</xsl:text> 
    </xsl:for-each-group> 
</xsl:template> 
相關問題