Home > XQuery Resources > XQuery Tutorial> Built-In Functions
XQuery has an extensive collection of built-in functions that are described in detail at http://www.w3.org/TR/xpath-functions/. You have already come across some functions like document(), in some other examples on this site. Here are a few more:

 
{-- String function - concat() --}

<result>
<concat>{concat('abc', 'def')}</concat>
<concat>{concat('abc', 'def', 'ghi', 'jkl', 'mno')}</concat>
</result>





{-- compare two strings --}

<compare>
<case>{compare('abc', 'abc')}</case>
<case>{compare('Strasse', 'Straße')}</case>
<case>{compare('Strassen', 'Straße')}</case>
</compare>





{-- demonstrate the contains() function for substring
    matching --}

<contains>
<result>{contains("now is the time", "is t")}</result>
</contains>





{-- aggregate functions in the XQuery function library --}

<aggregate>
    <count>{count((<one>1</one>, <two>2</two>))}</count>
    <avg>{avg((1,2,6))}</avg>
    <max>{max((1,2,6))}</max>
    <min>{min((1,2,6))}</min>
    <sum>{sum((1,2,6))}</sum>
</aggregate>





{-- demonstrates the copy function that does a deep copy of
    its argument --}

let $v := (<family name='gan'> <father>peter</father></family>)
return ( copy($v) )





{-- xf:deep-equal --}

let $n1 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
    <element2 a1="123" a2="456">
      <element2.1 a1="abc" a2="def">
        <element2.1.1>world</element2.1.1>
      </element2.1>
    </element2>
  </root>

{-- $n2 is same as $n1 --}
let $n2 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
    <element2 a1="123" a2="456">
      <element2.1 a1="abc" a2="def">
        <element2.1.1>world</element2.1.1>
      </element2.1>
    </element2>
  </root>

{-- $n3 does not have <element2.1.1> --}
let $n3 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
    <element2 a1="123" a2="456">
      <element2.1 a1="abc" a2="def">
      </element2.1>
    </element2>
  </root>

{-- $n4 has one more attribute for <element2.1> --}
let $n4 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
    <element2 a1="123" a2="456">
      <element2.1 a1="abc" a2="def" a3="BAD">
        <element2.1.1>world</element2.1.1>
      </element2.1>
    </element2>
  </root>

{-- $n5 has one less attribute for <element2> --}
let $n5 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
    <element2 a1="123">
      <element2.1 a1="abc" a2="def">
        <element2.1.1>world</element2.1.1>
      </element2.1>
    </element2>
  </root>

{-- $n6 has one more element <element3> --}
let $n6 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
    <element2 a1="123" a2="456">
      <element2.1 a1="abc" a2="def">
        <element2.1.1>world</element2.1.1>
      </element2.1>
    </element2>
    <element3>BAD</element3>
  </root>

{-- $n7 has one less element <element2> --}
let $n7 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
  </root>

{-- $n8 has comment --}
let $n8 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
    <!-- some comment -->
    <element2 a1="123" a2="456">
      <element2.1 a1="abc" a2="def">
        <element2.1.1>world</element2.1.1>
      </element2.1>
    </element2>
  </root>

{-- $n9 has different element text value --}
let $n9 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
    <element2 a1="123" a2="456">
      <element2.1 a1="abc" a2="def">
        <element2.1.1>BAD</element2.1.1>
      </element2.1>
    </element2>
  </root>

{-- $n10 has different attr text value --}
let $n10 :=
  <root>
    <element1 a1="123" a2="456">
      <element1.1 a1="abc" a2="def">hello</element1.1>
    </element1>
    <element2 a1="123" a2="456">
      <element2.1 a1="abc" a2="BAD">
        <element2.1.1>world</element2.1.1>
      </element2.1>
    </element2>
  </root>

return
<result>
  <n1>{$n1}</n1>
  <n2>{$n2}</n2>
  <n3>{$n3}</n3>
  <n4>{$n4}</n4>
  <n5>{$n5}</n5>
  <n6>{$n6}</n6>
  <n7>{$n7}</n7>
  <n8>{$n8}</n8>
  <n9>{$n9}</n9>
  <n10>{$n10}</n10>
  <check>n1 and n1</check>
  <case>
  {
    if (deep-equal($n1, $n1)) then "Equal" else "Not Equal"
  }
  </case>
  <check>n1 and n2</check>
  <case>
  {
    if (deep-equal($n1, $n2)) then "Equal" else "Not Equal"
  }
  </case>
  <check>n1 and n3</check>
  <case>
  {
    if (deep-equal($n1, $n3)) then "Equal" else "Not Equal"
  }
  </case>
  <check>n1 and n4</check>
  <case>
  {
    if (deep-equal($n1, $n4)) then "Equal" else "Not Equal"
  }
  </case>
  <check>n1 and n5</check>
  <case>
  {
    if (deep-equal($n1, $n5)) then "Equal" else "Not Equal"
  }
  </case>
  <check>n1 and n6</check>
  <case>
  {
    if (deep-equal($n1, $n6)) then "Equal" else "Not Equal"
  }
  </case>
  <check>n1 and n7</check>
  <case>
  {
    if (deep-equal($n1, $n7)) then "Equal" else "Not Equal"
  }
  </case>
  <check>n1 and n8</check>
  <case>
  {
    if (deep-equal($n1, $n8)) then "Equal" else "Not Equal"
  }
  </case>
  <check>n1 and n9</check>
  <case>
  {
    if (deep-equal($n1, $n9)) then "Equal" else "Not Equal"
  }
  </case>
  <check>n1 and n10</check>
  <case>
  {
    if (deep-equal($n1, $n10)) then "Equal" else "Not Equal"
  }
  </case>
</result>





{-- distinct-nodes() (equality based on node identity) --}

let $n1 := <n1/>
let $n2 := <n2/>
let $seq1 := (<n1/>, <n2/>, $n1, $n2)
let $seq2 := ($n1, $n2, $n1, $n2, $n1, $n2)
let $seq3 := ()
let $ds1 := distinct-nodes($seq1)
let $ds2 := distinct-nodes($seq2)
let $ds3 := distinct-nodes($seq3)

return
<result>
  <test>
    <seq>{$seq1}</seq>
    <distinct-seq>{$ds1}</distinct-seq>
  </test>
  <test>
    <seq>{$seq2}</seq>
    <distinct-seq>{$ds2}</distinct-seq>
  </test>
  <test>
    <seq>{$seq3}</seq>
    <distinct-seq>{$ds3}</distinct-seq>
  </test>
</result>





{-- demonstrates the use of distinct-values() --}

{-- node sequences --}
let $n1 := <n1><n11>foo</n11></n1>
let $n2 := <n2><n22>bar</n22></n2>
let $seq1 := (<n1><n11>foo</n11></n1>, <n2><n22>bar</n22></n2>, $n1, $n2)
let $seq2 := ($n1, $n2, $n1, $n2, $n1, $n2)
let $seq3 := ()
let $ds1 := distinct-values($seq1)
let $ds2 := distinct-values($seq2)
let $ds3 := distinct-values($seq3)

{-- simple value sequences --}
let $vseq1 := (1, 2, 1, 2, 3, 4, 1, 3)
let $vseq2 := ("foo", "bar", "Foo", "Bar", "foo", "bar")
let $vseq3 := (100, "100", integer("100"), -123, "-123", integer("-123"))
let $vseq4 := (
    dateTime("2002-08-18T12:34:56"), "2002-08-18T12:34:56",
    dateTime("2002-08-18T12:34:56"),
    date("2002-08-18"), "2002-08-18", date("2002-08-18"),
    time("12:34:56"), "12:34:56", time("12:34:56"))
let $vds1 := distinct-values($vseq1)
let $vds2 := distinct-values($vseq2)
let $vds3 := distinct-values($vseq3)
let $vds4 := distinct-values($vseq4)

return
<result>
  <node-seq>
    <distinct-seq1>{$ds1}</distinct-seq1>
    <distinct-seq2>{$ds2}</distinct-seq2>
    <distinct-seq3>{$ds3}</distinct-seq3>
  </node-seq>
  <simple-seq>
    <distinct-seq1>{$vds1}</distinct-seq1>
    <distinct-seq2>{$vds2}</distinct-seq2>
    <distinct-seq3>{$vds3}</distinct-seq3>
    <distinct-seq4>{$vds4}</distinct-seq4>
  </simple-seq>
</result>

 


Company | Products | Solutions | News & Events | Developers | Contact Us | Site Map