XML/XQuery/order by

Материал из Web эксперт
Версия от 11:25, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Inadvertent resorting in document inventory

   <source lang="xml">

File: Data.xml <order>

 <car model="A">
   <id>0001</id>
   <name language="en">name 1</name>
   <colorChoices>navy black</colorChoices>
 </car>
 <car model="B">
   <id>0002</id>
   <name language="en">name 2</name>
 </car>
 <car model="B">
   <id>0003</id>
   <name language="en">name 3</name>
 </car>
 <car model="C">
   <id>0004</id>
   <name language="en">name 4</name>
 </car>

</order> File: Query.xquery let $sortedProds := for $prod in doc("Data.xml")//car

                   order by $prod/id
                   return $prod

for $prodName in $sortedProds/name

return
  • {string($prodName)}
  • Output: <?xml version="1.0" encoding="UTF-8"?>

  • name 1
  • name 2
  • name 3
  • name 4
  • </source>
       
      
    


    order by clause demo

       <source lang="xml">
    

    File: Data.xml <order>

     <car model="A">
       <name language="en">name 1</name>
     </car>
     <car model="B">
       <name language="en">name 2</name>
     </car>
     <car model="B">
       <name language="en">name 3</name>
     </car>
    

    </order>

    File: Query.xquery for $prod in doc("Data.xml")/order/car where $prod/@model = "B" order by $prod/name return $prod/name Output: <?xml version="1.0" encoding="UTF-8"?> <name language="en">name 2</name> <name language="en">name 3</name>

    </source>
       
      
    


    order by stateCt

       <source lang="xml">
    

    File: Data.xml

    <order>

     <car dept="A">
       <number>1</number>
       <name language="en">name 1</name>
     </car>
     <car dept="B">
       <number>2</number>
       <name language="en">name 2</name>
     </car>
     <car dept="B">
       <number>3</number>
       <name language="en">name 3</name>
     </car>
     <car dept="C">
       <number>4</number>
       <name language="en">name 4</name>
     </car>
    

    </order>

    File: Query.xquery

    for $prod in doc("Data.xml")//car where $prod/@dept = "B" order by $prod/name return $prod/name

    Output: <?xml version="1.0" encoding="UTF-8"?> <name language="en">name 2</name> <name language="en">name 3</name>

    </source>
       
      
    


    The order by clause

       <source lang="xml">
    

    File: Data.xml <inventory>

     <car model="A" id="0001" />
     <car model="B" id="0002" />
     <car model="B" id="0003" />
     <car model="C" id="0004" />
     <car model="C" id="0004" />
     <car model="A" id="0001" />
    

    </inventory>

    File: Query.xquery for $car in doc("Data.xml")//car order by $car/@id return $car Output: <?xml version="1.0" encoding="UTF-8"?> <car model="A" id="0001"/> <car model="A" id="0001"/> <car model="B" id="0002"/> <car model="B" id="0003"/> <car model="C" id="0004"/> <car model="C" id="0004"/>

    </source>
       
      
    


    Using an inventory comparison

       <source lang="xml">
    

    File: Data.xml <order>

     <car model="A">
       <id>0001</id>
       <name language="en">name 1</name>
     </car>
     <car model="B">
       <id>0002</id>
       <name language="en">name 2</name>
     </car>
     <car model="B">
       <id>0003</id>
       <name language="en">name 3</name>
     </car>
    

    </order> File: Query.xquery let $prods := doc("Data.xml")//car for $prod in $prods where $prod << $prods[@model = $prod/@model][last()] return $prod

    Output: <?xml version="1.0" encoding="UTF-8"?> <car model="B">

       <id>0002</id>
       <name language="en">name 2</name>
     </car>
    </source>
       
      
    


    Using multiple inventorying specifications

       <source lang="xml">
    

    File: Data.xml <inventory>

     <car model="A" id="0001"/>
     <car model="B" id="0002"/>
     <car model="B" id="0003"/>
     <car model="C" id="0004"/>
     <car model="C" id="0004"/>
     <car model="A" id="0001"/>
    

    </inventory>

    File: Query.xquery

    for $car in doc("Data.xml")//car order by $car/@model, $car/@id return $car Output: <?xml version="1.0" encoding="UTF-8"?> <car model="A" id="0001"/> <car model="A" id="0001"/> <car model="B" id="0002"/> <car model="B" id="0003"/> <car model="C" id="0004"/> <car model="C" id="0004"/>

    </source>
       
      
    


    without inadvertent resorting

       <source lang="xml">
    

    File: Data.xml <order>

     <car model="A">
       <id>0001</id>
       <name language="en">name 1</name>
     </car>
     <car model="B">
       <id>0002</id>
       <name language="en">name 2</name>
     </car>
     <car model="B">
       <id>0003</id>
       <name language="en">name 3</name>
     </car>
     <car model="C">
       <id>0004</id>
       <name language="en">name 4</name>
     </car>
    

    </order> File: Query.xquery for $prod in doc("Data.xml")//car order by $prod/id

    return
  • {string($prod/name)}
  • Output: <?xml version="1.0" encoding="UTF-8"?>

  • name 1
  • name 2
  • name 3
  • name 4
  • </source>