Example 1-1. Product catalog input document (catalog.xml)
<catalog> <product dept="WMN"> <number>557</number> <name language="en">Fleece Pullover</name> <colorChoices>navy black</colorChoices> </product> <product dept="ACC"> <number>563</number> <name language="en">Floppy Sun Hat</name> </product> <product dept="ACC"> <number>443</number> <name language="en">Deluxe Travel Bag</name> </product> <product dept="MEN"> <number>784</number> <name language="en">Cotton Dress Shirt</name> <colorChoices>white gray</colorChoices> <desc>Our <i>favorite</i> shirt!</desc> </product></catalog>
Example 1-2. Price information input document (prices.xml)
<prices> <priceList effDate="2015-11-15"> <prod num="557"> <price currency="USD">29.99</price> <discount type="CLR">10.00</discount> </prod> <prod num="563"> <price currency="USD">69.99</price> </prod> <prod num="443"> <price currency="USD">39.99</price> <discount type="CLR">3.99</discount> </prod> </priceList></prices>
Example 1-3. Order input document (order.xml)
<order num="00299432" date="2015-09-15" cust="0221A"> <item dept="WMN" num="557" quantity="1" color="navy"/> <item dept="ACC" num="563" quantity="1"/> <item dept="ACC" num="443" quantity="2"/> <item dept="MEN" num="784" quantity="1" color="white"/> <item dept="MEN" num="784" quantity="1" color="gray"/> <item dept="WMN" num="557" quantity="1" color="black"/></order>
Example 1-4. Four product
elements selected from the catalog
<product dept="WMN"> <number>557</number> <name language="en">Fleece Pullover</name> <colorChoices>navy black</colorChoices></product><product dept="ACC"> <number>563</number> <name language="en">Floppy Sun Hat</name></product><product dept="ACC"> <number>443</number> <name language="en">Deluxe Travel Bag</name></product><product dept="MEN"> <number>784</number> <name language="en">Cotton Dress Shirt</name> <colorChoices>white gray</colorChoices> <desc>Our <i>favorite</i> shirt!</desc></product>
Example 1-5. Simple FLWOR
Query
for $prod in doc("catalog.xml")/catalog/productwhere $prod/@dept = "ACC"order by $prod/namereturn $prod/name
Results
<name language="en">Deluxe Travel Bag</name><name language="en">Floppy Sun Hat</name>
Example 1-6. Adding a let
clause
for $prod in doc("catalog.xml")/catalog/productlet $name := $prod/namewhere $prod/@dept = "ACC"order by $namereturn $name
Example 1-7. Wrapping results in a new element
Query
<ul>{ for $prod in doc("catalog.xml")/catalog/product where $prod/@dept='ACC' order by $prod/name return $prod/name}</ul>
Results
<ul> <name language="en">Deluxe Travel Bag</name> <name language="en">Floppy Sun Hat</name></ul>
Example 1-8. Element constructor in FLWOR return
clause
Query
<ul>{ for $prod in doc("catalog.xml")/catalog/product where $prod/@dept='ACC' order by $prod/name return <li>{$prod/name}</li>}</ul>
Results
<ul> <li><name language="en">Deluxe Travel Bag</name></li> <li><name language="en">Floppy Sun Hat</name></li></ul>
Example 1-9. Using the data
function
Query
<ul>{ for $prod in doc("catalog.xml")/catalog/product where $prod/@dept='ACC' order by $prod/name return <li>{data($prod/name)}</li>}</ul>
Results
<ul> <li>Deluxe Travel Bag</li> <li>Floppy Sun Hat</li></ul>
Example 1-10. Adding attributes to results
Query
<ul type="square">{ for $prod in doc("catalog.xml")/catalog/product where $prod/@dept='ACC' order by $prod/name return <li class="{$prod/@dept}">{data($prod/name)}</li>}</ul>
Results
<ul type="square"> <li class="ACC">Deluxe Travel Bag</li> <li class="ACC">Floppy Sun Hat</li></ul>
Example 1-11. Joining multiple input documents
Query
for $item in doc("order.xml")//itemlet $name := doc("catalog.xml")//product[number = $item/@num]/namereturn <item num="{$item/@num}" name="{$name}" quan="{$item/@quantity}"/>
Results
<item num="557" name="Fleece Pullover" quan="1"/><item num="563" name="Floppy Sun Hat" quan="1"/><item num="443" name="Deluxe Travel Bag" quan="2"/><item num="784" name="Cotton Dress Shirt" quan="1"/><item num="784" name="Cotton Dress Shirt" quan="1"/><item num="557" name="Fleece Pullover" quan="1"/>
Example 1-12. Aggregating values
Query
xquery version "3.0";for $i in doc("order.xml")//itemlet $d := $i/@deptgroup by $d order by $dreturn <department name="{$d}" totQuantity="{sum($i/@quantity)}"/>
Results
<department name="ACC" totQuantity="3"/><department name="MEN" totQuantity="2"/><department name="WMN" totQuantity="2"/>