XML/XQuery/if

Материал из Web эксперт
Перейти к: навигация, поиск

Conditional expression

   <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 for $prod in (doc("Data.xml")/order/car) return if ($prod/@model = "ACC")

      then <accessoryid>{data($prod/id)}</accessoryid>
      else <otherid>{data($prod/id)}</otherid>

Output: <?xml version="1.0" encoding="UTF-8"?> <otherid>0001</otherid> <otherid>0002</otherid> <otherid>0003</otherid>

</source>
   
  


Conditional expression returning multiple expressions

   <source lang="xml">

File: Data.xml <order>

 <car model="ACC">
   <id>0001</id>
   <name language="en">name 1</name>
   <colorChoices>navy black</colorChoices>
 </car>
 <car model="BCC">
   <id>0002</id>
   <name language="en">name 2</name>
 </car>
 <car model="BCC">
   <id>0003</id>
   <name language="en">name 3</name>
 </car>

</order> File: Query.xquery for $prod in (doc("Data.xml")/order/car) return if ($prod/@model = "ACC")

      then (<accessoryid>{data($prod/id)}</accessoryid>,
           <accessoryName>{data($prod/name)}</accessoryName>)
      else <otherid>{data($prod/id)}</otherid>

Output: <?xml version="1.0" encoding="UTF-8"?> <accessoryid>0001</accessoryid> <accessoryName>name 1</accessoryName> <otherid>0002</otherid> <otherid>0003</otherid>

</source>
   
  


Converting values without a lookup table

   <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 $cat := doc("Data.xml")/order for $model in distinct-values($cat/car/@model)

return
  • Department: {if ($model = "B") then "Accessories" else if ($model = "C") then "Menswear" else if ($model = "A") then "Womens" else () } ({$model})
  • Output: <?xml version="1.0" encoding="UTF-8"?>

  • Department: Womens (A)
  • Department: Accessories (B)
  • </source>
       
      
    


    If statement in return clause

       <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

        let $idProds := count($prods)
        for $prod at $count in $prods
        return if ($count = $idProds)
               then concat($prod/name,".")
               else concat($prod/name,",")
    

    Output: <?xml version="1.0" encoding="UTF-8"?>name 1, name 2, name 3.

    </source>
       
      
    


    If then else stateCt

       <source lang="xml">
    

    File: Data.xml <prices>

     <priceList effDate="2006-11-15">
       <prod num="1">
         <price currency="USD">29.99</price>
         <discount type="CLR">10.00</discount>
       </prod>
       <prod num="2">
         <price currency="USD">69.99</price>
       </prod>
       <prod num="3">
         <price currency="USD">39.99</price>
         <discount type="CLR">3.99</discount>
       </prod>
     </priceList>
    

    </prices>

    File: Query.xquery

    let $bargains := doc("Data.xml")/prices/priceList/prod[price < 30] return if ($bargains)

          then <bargain-bin>{$bargains}</bargain-bin>
          else ()
    

    Output: <?xml version="1.0" encoding="UTF-8"?> <bargain-bin>

      <prod num="1">
         <price currency="USD">29.99</price>
         <discount type="CLR">10.00</discount>
       </prod>
    

    </bargain-bin>

    </source>
       
      
    


    Nested conditional expressions

       <source lang="xml">
    

    File: Data.xml <order>

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

    </order>

    File: Query.xquery for $prod in (doc("Data.xml")/order/car) return if ($prod/@model = "ACC")

          then <accessory>{data($prod/id)}</accessory>
          else if ($prod/@model = "WMN")
               then <womens>{data($prod/id)}</womens>
               else if ($prod/@model = "MEN")
                    then <mens>{data($prod/id)}</mens>
                    else <other>{data($prod/id)}</other>
    

    Output: <?xml version="1.0" encoding="UTF-8"?> <accessory>0001</accessory> <other>0002</other> <other>0003</other>

    </source>