繁体   English   中英

xQuery返回最大元素

[英]xQuery on returning maximum element

我对xQuery比较陌生。 我一直在努力为此寻求可行的解决方案。 基本上我有以下xml:

<skills>
    <skill name="XQuery" level="2"/>,
    <skill name="R" level="1"/>,
    <skill name="Python" level="4"/>,
    <skill name="Python" level="5"/>,
    <skill name="Java" level="2"/>,
    <skill name="C" level="2"/>,
    <skill name="C" level="5"/>
</skills>

我的预期结果是:

<skill name="XQuery" level="2"/>,
<skill name="Python" level="5"/>,
<skill name="R" level="1"/>,
<skill name="Java" level="2"/>,
<skill name="C" level="5"/>

对于具有相同名称的所有元素,我想返回最大值。

这是一种方法:

let $xml :=
  <skills>
    <skill name="XQuery" level="2"/>,
    <skill name="R" level="1"/>,
    <skill name="Python" level="4"/>,
    <skill name="Python" level="5"/>,
    <skill name="Java" level="2"/>,
    <skill name="C" level="2"/>,
    <skill name="C" level="5"/>
  </skills>

for $distinct-name in distinct-values($xml/skill/@name)
let $skills := $xml/skill[@name = $distinct-name]
let $max := max($skills/@level)
return $skills[@level = $max][1]

这是另一个解决方案(使用XQuery 3.1):

let $xml :=
  <skills>
    <skill name="XQuery" level="2"/>,
    <skill name="R" level="1"/>,
    <skill name="Python" level="4"/>,
    <skill name="Python" level="5"/>,
    <skill name="Java" level="2"/>,
    <skill name="C" level="2"/>,
    <skill name="C" level="5"/>
  </skills>

for $skills in $xml/skill
group by $name := $skills/@name
return sort($skills, function($skill) { number($skill/@level) })[last()]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM