Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 将结果限制在xquery中的前四名 { 对于doc(“x.xml”)/users/org中的$o 式中fn:计数($o/mem) 按fn排序:计数($o/mem)递减 返回 {$o/@name/string()} {$o/@ab/string()} {fn:count($o/mem)} }_Xpath_Xquery_Zorba - Fatal编程技术网

Xpath 将结果限制在xquery中的前四名 { 对于doc(“x.xml”)/users/org中的$o 式中fn:计数($o/mem) 按fn排序:计数($o/mem)递减 返回 {$o/@name/string()} {$o/@ab/string()} {fn:count($o/mem)} }

Xpath 将结果限制在xquery中的前四名 { 对于doc(“x.xml”)/users/org中的$o 式中fn:计数($o/mem) 按fn排序:计数($o/mem)递减 返回 {$o/@name/string()} {$o/@ab/string()} {fn:count($o/mem)} },xpath,xquery,zorba,Xpath,Xquery,Zorba,我已经按降序排列了结果,但我只需要从这个结果的前4名。我尝试在wiki页面上使用sub sequence方法和[position()1,4]方法来查找前4名,但没有成功。一种可能的方法是使用两个for循环,并限制内部for仅返回前4个结果: <a> { for $o in doc("x.xml")/users/org where fn:count($o/mem) order by fn:count($o/mem) descending return <org>

我已经按降序排列了结果,但我只需要从这个结果的前4名。我尝试在wiki页面上使用sub sequence方法和[position()1,4]方法来查找前4名,但没有成功。

一种可能的方法是使用两个
for
循环,并限制内部
for
仅返回前4个结果:

<a>
{
for $o in doc("x.xml")/users/org
where fn:count($o/mem)
order by fn:count($o/mem) descending
return <org>
            <b> {$o/@name/string()} </b>
            <c> {$o/@ab/string()} </c>
            <d> {fn:count($o/mem)} </d>
       </org>
}
</a>

更新后的一个不起作用(错误消息:静态错误[err:XPST0003]:无效表达式:语法错误,意外“=”),但第一个运行良好。@崩溃我的错误,需要
{}
包装整个查询以使其起作用。这里使用不同的XML结构测试:次要观察,
其中fn:count($o/mem)
似乎有点反常。您可以在存在($o/mem)的地方编写
,甚至在$o/mem的地方编写
,或者只需在初始选择中添加条件:
用于doc('x.xml')/users/org[mem]
<a>
{
    for $p in
    (
        for $o in doc("x.xml")/users/org
        where fn:count($o/mem)
        order by fn:count($o/mem) descending
        return <org>
                    <b> {$o/@name/string()} </b>
                    <c> {$o/@ab/string()} </c>
                    <d> {fn:count($o/mem)} </d>
               </org>
    )[position() <= 4]
    return $p
}
</a>
<a>
{
    (
        for $o in doc("x.xml")/users/org
        where fn:count($o/mem)
        order by fn:count($o/mem) descending
        return <org>
                    <b> {$o/@name/string()} </b>
                    <c> {$o/@ab/string()} </c>
                    <d> {fn:count($o/mem)} </d>
               </org>
    )[position() <= 4]
}
</a>