XSLT agrega valores a través de múltiples elementos

Estoy atascado con un problema simple en mi XML/XSLT

Realmente no puedo poner un nombre propio al problema y, por lo tanto, parece que no puedo encontrar ninguna solución.

XML:

<root>
   <entry gid ="001">
      <level_1>
         <target_value>50</target_value>
      </level_1>
   </entry>

   <entry gid ="001">
      <level_1>
         <target_value>30</target_value>
      </level_1>
   </entry>

   <entry gid ="002">
      <level_1>
         <target_value>40</target_value>
      </level_1>
   </entry>

   <entry gid ="002">
      <level_1>
         <target_value>20</target_value>
      </level_1>
   </entry>
</root>

XSL:

<xsl:for-each select="entry[@gid='001']">
   <xsl:if test="level_1/target_value != ''">
      <xsl:value-of select="sum(level_1/target_value)" />
   </xsl:if>
</xsl:for-each>

Resultado: 5030

¡Cualquier ayuda sería muy apreciada!

preguntado el 22 de mayo de 12 a las 10:05

Sería de gran ayuda si dijera qué resultado desea y cómo derivarlo de su XML. Supongo que quieres resumir todo /root/entry[@gid='001']/level_1/target_value elementos, resultando en un valor de 80? -

Sí, Borodin, eso es exactamente lo que busco:

1 Respuestas

Como has visto, tu transformación totaliza el único level_1/target_value elemento y salidas que para cada entry[@gid='001'] elemento.

Ya que quieres un total a través todos <entry> elementos con un gid of 001 debe escribir eso en el conjunto de nodos que envía a sum().

El XSLT se ve así

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:output method="text" />

  <xsl:template match="/root">
    <xsl:value-of select="sum(entry[@gid='001']/level_1/target_value)" />
  </xsl:template>

</xsl:stylesheet>

salida

80

contestado el 22 de mayo de 12 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.