【问题标题】:Unable to perform multiplication with XQuery in BaseX无法在 BaseX 中使用 XQuery 执行乘法运算
【发布时间】:2013-04-24 11:37:01
【问题描述】:

考虑一个定义为的 xml 文件:

<?xml version="1.0"?>
<sports>
    <teams>
    <team tno="t100">
            <tname>Knights</tname>
            <city>London</city>
        </team>
        <team tno="t200">
            <tname>Dukes</tname>
            <city>Surrey</city>
        </team> 
        <team tno="t300">
            <tname>Kings</tname>
            <city>Leeds</city>
        </team>     
    </teams>

    <players>
    <player pid="p501">
            <pname>Simon</pname>
            <city>London</city>
        </player>
        <player pid="p502">
            <pname>Andrew</pname>
            <city>Birmingham</city>
        </player>
        <player pid="p503">
            <pname>Mike</pname>
            <city>London</city>
        </player>       
    </players>


    <parts>
        <part pno="801">            
            <pname>Right Gloves</pname>
            <price>8.99</price>
        </part>
        <part pno="901">            
            <pname>Left Gloves</pname>
            <price>9.99</price>
        </part>
        <part pno="851">            
            <pname>Left Pad</pname>
            <price>33.00</price>
        </part>
        <part pno="951">            
            <pname>Right Pad</pname>
            <price>43.00</price>
        </part>
    </parts>

    <orders>    
        <order ono="61" playerNum="p501" team="t200" >
            <kits>
                <kit>
                    <pNum>801</pNum>
                    <qty>11</qty>
                </kit>
            </kits>
        </order>
        <order ono="62" playerNum="p501" team="t100" >
            <kits>
                <kit>
                    <pNum>901</pNum>
                    <qty>12</qty>
                </kit>

            </kits>
        </order>

        <order ono="63" playerNum="p502" team="t300" >
            <kits>
                <kit>
                    <pNum>851</pNum>
                    <qty>9</qty>
                </kit>

            </kits>
        </order>

        <order ono="64" playerNum="p503" team="t300" >
            <kits>
                <kit>
                    <pNum>951</pNum>
                    <qty>16</qty>
                </kit>

            </kits>
        </order>


        <order ono="65" playerNum="p503"  team="t200" >
            <kits>
                <kit>
                    <pNum>801</pNum>
                    <qty>12</qty>
                </kit>
                <kit>
                    <pNum>901</pNum>
                    <qty>16</qty>
                </kit>
                <kit>
                    <pNum>851</pNum>
                    <qty>13</qty>
                </kit>
            </kits>
        </order>

    </orders>
</sports>

我尝试运行的查询是获取某个订单(比如订单 65)的总定价。 BaseX 中的查询是:

let $d:=doc("sports.xml")
let $o:=$d/sports/orders/order[@ono=65]
let $p:=$d/sports/parts/part
for $k in $o/kits/kit 
return <OrderCost>
({$k/qty})*({$p[@pno=$k/pNum]/price})
</OrderCost>

我的输出:

<OrderCost>
(<qty>12</qty>)*(<price>8.99</price>)
</OrderCost>
<OrderCost>
(<qty>16</qty>)*(<price>9.99</price>)
</OrderCost>
<OrderCost>
(<qty>13</qty>)*(<price>33.00</price>)
</OrderCost>

我无法将数量乘以相应的价格然后得到总和。我在这里做错了什么?

【问题讨论】:

    标签: xquery basex


    【解决方案1】:

    创建元素时,大括号内的所有内容都会被计算(并且大括号外的任何内容都不会被计算)。由于您只在变量周围放置了大括号,因此只有这些被替换,但不执行乘法。

    用这一行替换:

    { $k/qty * $p[@pno=$k/pNum]/price }
    

    【讨论】:

    • 感谢 Jens,这很有效。但是,“sum()”函数是否也有任何此类限制。当我修改我的代码以获得所有价格的总和,而不是所有项目的总和时,会打印“总和”。
    • 这里是修改后的代码: ** let $d:=doc("sports.xml") let $o:=$d/sports/orders/order[@ono=65] let $p :=$d/sports/parts/part for $k in $o/kits/kit return sum({ $k/qty * $p[@pno=$k/pNum]/price }) ** 及以下是 o/p: sum(107.88) sum(159.84) sum(429)
    • 如您希望 sum() 得到评估,它也必须在大括号内。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2022-06-14
    • 2015-10-31
    相关资源
    最近更新 更多