Xquery 在不同的行中返回不同的结果

Xquery 在不同的行中返回不同的结果,xquery,flwor,Xquery,Flwor,我发现了类似的问题,但我试过了,但没有成功。 我有“ventas”集合,集合中有四个不同的xml文件 以下是xml文件: productos.xml <productos> <product categoria="A" pvp="20"> <codigo>A2015</codigo> <nombre>Cuchillas</nombre> <stock>100</stock> &

我发现了类似的问题,但我试过了,但没有成功。 我有“ventas”集合,集合中有四个不同的xml文件

以下是xml文件:

productos.xml

<productos>
<product categoria="A" pvp="20">
    <codigo>A2015</codigo>
    <nombre>Cuchillas</nombre>
    <stock>100</stock>
</product>
<product categoria="A" pvp="5">
    <codigo>A2005</codigo>
    <nombre>Laminas</nombre>
    <stock>57</stock>
</product>
<product categoria="B" pvp="15">
    <codigo>B1501</codigo>
    <nombre>Comida</nombre>
    <stock>50</stock>
</product>
<product categoria="C" pvp="20">
    <codigo>C2020</codigo>
    <nombre>Sopa</nombre>
    <stock>100</stock>
</product>
<product categoria="A" pvp="100">
    <codigo>A1001</codigo>
    <nombre>Tela</nombre>
    <stock>100</stock>
</product>
</productos>
<clientes>
<clien numero="01">
    <nombre>Juan</nombre>
    <poblacion>Madrid</poblacion>
    <tlf>111111111</tlf>
    <direccion>Alcala</direccion>
</clien>

<clien numero="02">
    <nombre>Luis</nombre>
    <poblacion>Barcelona</poblacion>
    <tlf>2222222222</tlf>
    <direccion>Canalets</direccion>
</clien>

<clien numero="03">
    <nombre>Sara</nombre>
    <poblacion>Madrid</poblacion>
    <tlf>01012101212</tlf>
    <direccion>Sol</direccion>
</clien>
</clientes>
<facturas>
<factura numero="100">
    <fecha>01/01/01</fecha>
    <importe>25</importe>
    <numcliente>01</numcliente>
</factura>
<factura numero="101">
    <fecha>01/01/01</fecha>
    <importe>40</importe>
    <numcliente>01</numcliente>
</factura>
<factura numero="102">
    <fecha>01/01/01</fecha>
    <importe>4</importe>
    <numcliente>02</numcliente>
</factura>
<factura numero="103">
    <fecha>01/01/01</fecha>
    <importe>80</importe>
    <numcliente>02</numcliente>
</factura>
<factura numero="104">
    <fecha>01/01/01</fecha>
    <importe>75</importe>
    <numcliente>01</numcliente>
</factura>
</facturas>
<detallefacturas>
<factura numero="100">
    <codigo>Z</codigo>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2005</codigo>
        <unidades>1</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="101">
    <codigo>X</codigo>
    <producto descuento="0">
        <codigo>B1501</codigo>
        <unidades>5</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>4</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="102">
    <codigo>Y</codigo>
    <producto descuento="0">
        <codigo>C2020</codigo>
        <unidades>15</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="103">
    <codigo>Q</codigo>
    <producto descuento="0">
        <codigo>C2020</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="104">
    <codigo>H</codigo>
    <producto descuento="0">
        <codigo>A1001</codigo>
        <unidades>10</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="105">
    <codigo>U</codigo>
    <producto descuento="0">
        <codigo>C2020</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
</factura>
</detallefacturas>
facturas.xml

<productos>
<product categoria="A" pvp="20">
    <codigo>A2015</codigo>
    <nombre>Cuchillas</nombre>
    <stock>100</stock>
</product>
<product categoria="A" pvp="5">
    <codigo>A2005</codigo>
    <nombre>Laminas</nombre>
    <stock>57</stock>
</product>
<product categoria="B" pvp="15">
    <codigo>B1501</codigo>
    <nombre>Comida</nombre>
    <stock>50</stock>
</product>
<product categoria="C" pvp="20">
    <codigo>C2020</codigo>
    <nombre>Sopa</nombre>
    <stock>100</stock>
</product>
<product categoria="A" pvp="100">
    <codigo>A1001</codigo>
    <nombre>Tela</nombre>
    <stock>100</stock>
</product>
</productos>
<clientes>
<clien numero="01">
    <nombre>Juan</nombre>
    <poblacion>Madrid</poblacion>
    <tlf>111111111</tlf>
    <direccion>Alcala</direccion>
</clien>

<clien numero="02">
    <nombre>Luis</nombre>
    <poblacion>Barcelona</poblacion>
    <tlf>2222222222</tlf>
    <direccion>Canalets</direccion>
</clien>

<clien numero="03">
    <nombre>Sara</nombre>
    <poblacion>Madrid</poblacion>
    <tlf>01012101212</tlf>
    <direccion>Sol</direccion>
</clien>
</clientes>
<facturas>
<factura numero="100">
    <fecha>01/01/01</fecha>
    <importe>25</importe>
    <numcliente>01</numcliente>
</factura>
<factura numero="101">
    <fecha>01/01/01</fecha>
    <importe>40</importe>
    <numcliente>01</numcliente>
</factura>
<factura numero="102">
    <fecha>01/01/01</fecha>
    <importe>4</importe>
    <numcliente>02</numcliente>
</factura>
<factura numero="103">
    <fecha>01/01/01</fecha>
    <importe>80</importe>
    <numcliente>02</numcliente>
</factura>
<factura numero="104">
    <fecha>01/01/01</fecha>
    <importe>75</importe>
    <numcliente>01</numcliente>
</factura>
</facturas>
<detallefacturas>
<factura numero="100">
    <codigo>Z</codigo>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2005</codigo>
        <unidades>1</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="101">
    <codigo>X</codigo>
    <producto descuento="0">
        <codigo>B1501</codigo>
        <unidades>5</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>4</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="102">
    <codigo>Y</codigo>
    <producto descuento="0">
        <codigo>C2020</codigo>
        <unidades>15</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="103">
    <codigo>Q</codigo>
    <producto descuento="0">
        <codigo>C2020</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="104">
    <codigo>H</codigo>
    <producto descuento="0">
        <codigo>A1001</codigo>
        <unidades>10</unidades>
        <importe>0</importe>
    </producto>
    <producto descuento="0">
        <codigo>A2015</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
</factura>
<factura numero="105">
    <codigo>U</codigo>
    <producto descuento="0">
        <codigo>C2020</codigo>
        <unidades>2</unidades>
        <importe>0</importe>
    </producto>
</factura>
</detallefacturas>
最后结果:

<detalle>
    <codigo>A2015</codigo>
    <nombre>Cuchillas</nombre>
    <cant>2</cant>
    <pvp>20</pvp>
    <importe/>
</detalle>
<detalle>
    <codigo>A2005</codigo>
    <nombre>Cuchillas</nombre>
    <cant>1</cant>
    <pvp>20</pvp>
    <importe/>
</detalle>
<detalle>
    <codigo>A2015</codigo>
    <nombre>Laminas</nombre>
    <cant>2</cant>
    <pvp>5</pvp>
    <importe/>
</detalle>
<detalle>
    <codigo>A2005</codigo>
    <nombre>Laminas</nombre>
    <cant>1</cant>
    <pvp>5</pvp>
    <importe/>
</detalle>

A2015
瓜希拉斯
2.
20
A2005
瓜希拉斯
1.
20
A2015
薄层
2.
5.
A2005
薄层
1.
5.

在最后一次尝试中,它返回不同元素中的数据,但复制所有数据。在每个元素中,它使用每个pvp。

我想您需要更改

for $productos in collection("/ventas")/productos
let $nombre := $productos/product[codigo=$codigos/codigo]/nombre,
    $pvp := $productos/product[codigo=$codigos/codigo]/@pvp

至于评论中提出的其他问题,你还没有展示你的输入结构,我认为你试图用一个问题解决各种问题。您现在是否拥有正确数量的
detalle
元素,以及正确的
nombre
子数据和正确的
pvp

为了使代码正确,我认为您最好使用

for $p1 in collection("/ventas")/productos/product,
    $p2 in collection("/ventas")/detallefacturas/factura[@numero="100"]/producto where $p1/codigo = $p2/codigo
let $nombre := $producto/nombre,
    $pvp := $producto/@pvp
return 
<detalle>
        <codigo>{data($p2/codigo)}</codigo>
        <nombre>{data($nombre)}</nombre>
        <cant>{data($p2/unidades)}</cant>
        <pvp>{data($pvp)}</pvp>
        <importe></importe>
</detalle>
对于集合中的$p1(“/ventas”)/productos/product,
集合中的$p2(“/ventas”)/detallefacturas/factura[@numero=“100”]/producto,其中$p1/codigo=$p2/codigo
设$nombre:=$producto/nombre,
$pvp:=$producto/@pvp
返回
{数据($p2/codigo)}
{数据($nombre)}
{数据($p2/unidades)}
{数据($pvp)}

使用示例数据编辑您的问题或使用该问题的示例数据提出新问题可能会有所帮助。

现在,我得到两个不同的元素,但值重复。我编辑了原来的帖子,你是对的。我更新了第一个问题,并用数据结构添加了所有数据。我还尝试了您的上一个代码,但它重复了de元素。@EBG,我看到您现在已经编辑了问题文本以包含示例数据,但似乎您已经删除了对您想要实现的目标的任何描述。请编辑问题以重新插入所需结果的清晰描述。