XML - Ayuda Xquery

 
Vista:
sin imagen de perfil
Val: 1
Ha mantenido su posición en XML (en relación al último mes)
Gráfica de XML

Ayuda Xquery

Publicado por Alberto (1 intervención) el 22/05/2020 01:14:57
Buenas necesito ayuda con Xquery y no se a quien recurrir. Les comento que tengo el siguiente archivo xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?xml version="1.0" encoding="UTF-8"?>
<tienda>
 
    <productos>
        <producto codigo="P0002">
            <nombre>Windows 8</nombre>
            <precio unidad="Euros">120</precio>
        </producto>
        <producto codigo="P0008">
            <nombre>Pendrive 32GB</nombre>
            <precio unidad="Euros">16</precio>
        </producto>
        <producto codigo="P0004">
            <nombre>Portatil ASUS</nombre>
            <precio unidad="Euros">400</precio>
        </producto>
        <producto codigo="P1600">
            <nombre>Raton para portatil</nombre>
            <precio unidad="Euros">10</precio>
        </producto>
        <producto codigo="P3000">
            <nombre>Microsoft Office 2013</nombre>
            <precio unidad="Euros">119</precio>
        </producto>
        <producto codigo="P5000">
            <nombre>Disco Duro 1 TB</nombre>
            <precio unidad="Euros">78</precio>
        </producto>
    </productos>
 
    <clientes>
        <cliente codigo="U300111">
            <nombrecompleto>Manuel Moreno</nombrecompleto>
            <direccion>
                <calle tipovia="Calle">Alameda</calle>
                <numero>23</numero>
                <municipio>Sevilla</municipio>
            </direccion>
            <telefono>607234125</telefono>
        </cliente>
        <cliente codigo="U120711">
            <nombrecompleto>Nieves Prieto</nombrecompleto>
            <direccion>
                <calle tipovia="Calle">Reino de Valencia</calle>
                <numero>3</numero>
                <municipio>Benidorm</municipio>
            </direccion>
            <telefono>608822173</telefono>
        </cliente>
        <cliente codigo="U030512">
            <nombrecompleto>Marina Sanchez</nombrecompleto>
            <direccion>
                <calle tipovia="Avenida">Severo Ochoa</calle>
                <numero>16</numero>
                <municipio>Granada</municipio>
            </direccion>
            <telefono>666588045</telefono>
        </cliente>
    </clientes>
 
    <compras>
        <cantidad producto="P0004" cliente="U300111" fechacompra="12/01/2012">5</cantidad>
        <cantidad producto="P0002" cliente="U300111" fechacompra="25/12/2011">3</cantidad>
        <cantidad producto="P0004" cliente="U120711" fechacompra="05/07/2011">7</cantidad>
        <cantidad producto="P1600" cliente="U300111" fechacompra="03/11/2011">2</cantidad>
        <cantidad producto="P0004" cliente="U030512" fechacompra="30/04/2012">1</cantidad>
        <cantidad producto="P0008" cliente="U120711" fechacompra="20/04/2012">3</cantidad>
    </compras>
 
</tienda>

Pues bien hay un ejercicio que no consigo sacar adelante. Lo que pide la consulta es obtener el nombre de los productos y el número de veces que ha sido comprado cada uno de ellos. Segun mi profesor necesito utilizar una cláusula where y una cláusula order by. Les dejo el código de la consulta que estoy utilizando por si hay algo que esté haciendo mal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for $a in doc ('tienda.xml')/tienda
 
let $idproducto := $a/productos/producto/@codigo
 
let $idcliente := $a/clientes/cliente/@codigo
where $a/compras/cantidad/@producto
 = $idproducto
    and $a/compras/cantidad/@cliente
 = $idcliente
 
order by $a/compras/cantidad/@producto
 
return
<productos>
<nombre>{$a/productos/producto/nombre}</nombre>
<numero_veces>{count($a/compras/cantidad)}</numero_veces>
</productos>

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder