XQuery/Returning the Longest String

From Wikibooks, the open-content textbooks collection

< XQuery
Jump to: navigation, search

Contents

[edit] Motivation

You want to create a very simple function that you can pass a sequence of strings and it will return the longest string(s) in that sequence.

[edit] Sample Program

xquery version "1.0";

declare function local:max-length($string-seq as xs:string*) as xs:string+ {
  let $max := max (for $s in  $string-seq  return string-length($s))
  return $string-seq[string-length(.) = $max]
};

let $tags :=
<tags>
   <tag>Z</tag>
   <tag>Ze</tag>
   <tag>Zee</tag>
   <tag>Zen</tag>
   <tag>Zenith</tag>
   <tag>nith</tag>
   <tag>ith</tag>
   <tag>Zenth</tag>
</tags>

return
<results>
   <max-string>{local:max-length(($tags/tag))}</max-string>
</results>

[edit] Results

<results>
   <max-string>Zenith</max-string>
</results>


Execute

[edit] Discussion

This XQuery creates a local function that takes zero or more strings:

$string-seq as xs:string*

and returns one or more strings:

as xs:string+

It uses the max() XPath function that looks at a sequence of values and returns the highest.

Note that if there are several strings in the input set that each have the same max length, it will return all strings of max length.

If you only want the first returned, add "[1]" to the return expression:

return $string-seq[string-length(.) = $max][1]