
tengo un pequeño problema y no alcanzo a entender xsl.
El caso es que tengo un xml con una tienda, que contiene productos y por otro lado, clientes, los cuales tienen nombre, apellidos, 4 tipos de numero de telefono, y la lista de la compra.


Lo que es ordenar los clientes, con sus nombres y todo eso lo tengo listo.


Lo que me falta es el poder calcular el subtotal de cada producto que compran (cantidad * precioProducto)


La cantidad está en la lista de la compra y el precioProducto está en la lista de productos.


Mejor dejo el codigo que tengo puesto:



> 
> ACLARACIÓN: El contenido completo del XML esta generado por un script
>  java, tanto nombres como numeros tanto las facturas son ficticias.
> 
> 
> 


XML:



```
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="factures.xsl"?>
<tenda>
    <productes>
        <producte preuUnitat='2.0'>Vi blanc botella 1L</producte>
        <producte preuUnitat='5.0'>Vi blanc botella 2L</producte>
        <producte preuUnitat='7.0'>Vi blanc garrafa 3L</producte>
        <producte preuUnitat='10.0'>Vi blanc garrafa 5L</producte>
        <producte preuUnitat='12.0'>Vi negre botella 1L</producte>
        <producte preuUnitat='15.0'>Vi negre botella 2L</producte>
        <producte preuUnitat='20.0'>Vi negre garrafa 3L</producte>
        <producte preuUnitat='25.0'>Vi negre garrafa 5L</producte>
        <producte preuUnitat='30.0'>Vi rosat botella 1L</producte>
        <producte preuUnitat='50.0'>Vi rosat botella 2L</producte>
        <producte preuUnitat='60.0'>Vi rosat garrafa 3L</producte>
        <producte preuUnitat='70.0'>Vi rosat garrafa 5L</producte>
    </productes>
    <factures>
        <factura numero="1">
            <client>
                <nom>Maria Josefa</nom>
                <cognoms>Crespo Soto</cognoms>
                <telefons>
                    <mobil tipus="feina">701 194 296</mobil>
            </telefons>
            </client>
            <compra>
                <producte id='n2'>9</producte>
                <producte id='n3'>3</producte>
                <producte id='r1'>4</producte>
                <producte id='r2'>1</producte>
                <producte id='r3'>2</producte>
            </compra>
        </factura>
        <factura numero="2">
            <client>
                <nom>Manuela</nom>
                <cognoms>Lara Rico</cognoms>
                <telefons>
                    <mobil tipus="privat">665 852 593</mobil>
                    <fixe tipus="privat">943 213 214</fixe>
                    <fixe tipus="feina">979 427 658</fixe>
            </telefons>
            </client>
            <compra>
                <producte id='b1'>10</producte>
                <producte id='b2'>6</producte>
                <producte id='b3'>2</producte>
                <producte id='b5'>9</producte>
                <producte id='r3'>7</producte>
            </compra>
        </factura>
        <factura numero="3">
            <client>
                <nom>Emilio</nom>
                <cognoms>Santos</cognoms>
                <telefons>
                    <mobil tipus="privat">725 215 087</mobil>
                    <fixe tipus="privat">810 696 902</fixe>
            </telefons>
            </client>
            <compra>
                <producte id='b2'>1</producte>
                <producte id='b3'>3</producte>
                <producte id='n2'>9</producte>
                <producte id='n3'>4</producte>
                <producte id='r1'>1</producte>
                <producte id='r2'>1</producte>
            </compra>
        </factura>
    </factures>
</tenda>

```

Y el XSL:



```
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="compra">
        <div class="listaCompra">
            <xsl:for-each select="producte">
                <div class="idProd"><xsl:value-of select="@id"/></div>
                <div class="nomProd"><xsl:value-of select="/tenda/productes/producte/."/></div>
                <div class="cantProd"><xsl:value-of select="."/></div>
                <div class="precProd"><xsl:value-of select=". * $temp"/></div>
            </xsl:for-each>
        </div>
        <xsl:variable name="temp">
            <xsl:for-each select="/tenda/productes/producte">
                <xsl:value-of select="@preuUnitat"/>
            </xsl:for-each>
        </xsl:variable>
    </xsl:template>
</xsl:stylesheet>

```

Dejo tambien una captura de lo que tengo:


[![Imagen de como quedaría la cosa](https://i.stack.imgur.com/dQzkd.png)](https://i.stack.imgur.com/dQzkd.png)


EDIT:
Ya lo solucioné todo. con un xsl:key pude hacerlo.



[Ayuda con cálculo XSL](/questions/171222/ayuda-con-c%c3%a1lculo-xsl)
=====================================================================



Puedes usar el siguiente XPath:



```
<span>
    <xsl:value-of select="sum(tenda/productes/producte/@preuUnitat)"/>
</span>

```

Bueno ese Xpath suma y este multiplica la suma por la cantidad:



```
<span>
    <xsl:value-of select="sum(tenda/productes/producte/@preuUnitat)*count(tenda/productes/producte/@preuUnitat)"/>
</span>

```

Puedes jugar con eso y revisar [funciones numericas en XPath](https://www.w3.org/TR/xpath-functions-31/#numeric-functions)


