user1503496
user1503496

Reputation: 191

Sum content values for each parent node

For each value of the node parent, I want to sum the related element values. In the below example, I am expecting to have 3 results : 30 for the first parent, 50 for the second and 0 for the 3rd parent as it has no parent value. can you help me getting this result please and rectify my code ? :

Example file :

<root>
<parent>
<parentValue>Val1</parentValue>
<element>
<elementname>A</elementname>
<elementvalue>10</elementvalue>
</element>
<element>
<elementname>A</elementname>
<elementvalue>20</elementvalue>
</element>
</parent>
<parent>
<parentValue>Val2</parentValue>
<element>
<elementname>B</elementname>
<elementvalue>50</elementvalue>
</element>
</parent>
<parent>
<element>
<elementname>C</elementname>
<elementvalue>60</elementvalue>
</element>
</parent>
</root>

Code :

<xsl:template match="/">
    <xsl:for-each select="/root/parent/parentValue">
      <xsl:variable name="result">
        <xsl:value-of select="sum(elementvalue)" />
      </xsl:variable>
    </xsl:for-each>

Upvotes: 0

Views: 56

Answers (1)

Martin Honnen
Martin Honnen

Reputation: 167696

Set up two templates

  <xsl:template match="parent[parentValue]">
     <xsl:value-of select="sum(element/elementvalue)"/>
  </xsl:template>

  <xsl:template match="parent[not(parentValue)]">0</xsl:template>

https://xsltfiddle.liberty-development.net/b4GWVn

Or a single one

  <xsl:template match="parent">
     <xsl:value-of select="sum(.[parentValue]/element/elementvalue)"/>
  </xsl:template>

https://xsltfiddle.liberty-development.net/b4GWVn/1

Upvotes: 1

Related Questions