XQuery 1.0-设置最大值

时间:2018-08-01 05:12:09

标签: xml xpath max xquery

使用Xquery 1.0,这是我正在使用的数据的一小部分样本:

<countries>
  <country name="Afghanistan" population="22664136" area="647500">
    <language percentage="11">Turkic</language>
    <language percentage="35">Pashtu</language>
    <language percentage="50">Afghan Persian</language>
  </country>
  <country name="Albania" population="3249136" area="28750"/>
  <country name="Algeria" population="29183032" area="2381740">
    <city>
      <name>Algiers</name>
      <population>1507241</population>
    </city>
  </country>
  <country name="American Samoa" population="59566" area="199"/>
  <country name="Andorra" population="72766" area="450"/>
  <country name="Angola" population="10342899" area="1246700"/>
  <country name="Anguilla" population="10424" area="91">
    <language percentage="100">English</language>

我正在尝试为每个“语言”子元素找到最大的“百分比”属性。经过多次尝试,我注意到了一个问题。

使用以下查询:

for $distinct_language in distinct-values(doc("countries.xml")/countries/country/language)
let $max := max(doc("countries.xml")/countries/country[language = $distinct_language]/language/@percentage)
return <Language_Max language="{$distinct_language}"> {$max} </Language_Max>

一小部分结果是:

<Language_Max language="Turkic">50</Language_Max>
<Language_Max language="Pashtu">50</Language_Max>
<Language_Max language="Afghan Persian">50</Language_Max>
<Language_Max language="English">100</Language_Max>

我期望仅以“突厥语”为例:

<Language_Max language="Turkic">11</Language_Max>

我认为问题是当我根据谓词设置$ max变量时,它会寻找一个将“突厥语”包含为语言的 Country (在这种情况下,该国家/地区是阿富汗) ,然后从该国家/地区的任何一种语言中获取最大百分比(从“阿富汗波斯”语言中获取50%)。

如何返回每种语言的最大百分比属性,而不是该国所有语言的最大百分比?

我希望这是有道理的,感谢您的协助!

1 个答案:

答案 0 :(得分:1)

您需要将谓词向下移动一级,并过滤语言而不是国家/地区。这是一种方法(我将语言绑定到一个附加变量,因为相同的数据将被访问两次):

let $languages := doc('countries.xml')/countries/country/language
for $language in distinct-values($languages)
let $max := max($languages[. = $language]/@percentage)
return <Language_Max language="{ $language }">{ $max }</Language_Max>