XML/XQuery/if
Содержание
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)
returnOutput: <?xml version="1.0" encoding="UTF-8"?>
</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>