XML/XQuery/output
Содержание
Adding an attribute to an element
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>
</order>
File: Query.xquery
for $prod in doc("Data.xml")/order/car[@model = "ACC"]
return <car id="P{$prod/id}">
{$prod/(@*, *)}
</car>
Adding attributes to results
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
<ul type="square">{
for $car in doc("Data.xml")/order/car
where $car/@model="A"
order by $car/name
return <li class="{$car/@model}">{data($car/name)}</li>
}</ul>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<ul type="square">
<li class="A">name 1</li>
</ul>
Constructing elements using XML-like syntax
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
<html>
<h1>car order</h1>
<ul>{
for $prod in doc("Data.xml")/order/car
return <li>id: {data($prod/id)}, name: {data($prod/name)}</li>
}</ul>
</html>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<html>
<h1>car order</h1>
<ul>
<li>id: 0001, name: name 1</li>
<li>id: 0002, name: name 2</li>
<li>id: 0003, name: name 3</li>
</ul>
</html>
Removing a child from an element
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[@model = "ACC"]
return <car>
{$prod/(@*, * except id)}
</car>
Turning content into markup
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 $model in distinct-values(doc("Data.xml")/order/car/@model)
return element {$model}
{doc("Data.xml")/order/car[@model = $model]/name}
Output:
<?xml version="1.0" encoding="UTF-8"?>
<A>
<name language="en">name 1</name>
</A>
<B>
<name language="en">name 2</name>
<name language="en">name 3</name>
</B>
Wrapping results in a new element
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
<ul>{
for $car in doc("Data.xml")/order/car
where $car/@model="ACC"
order by $car/name
return $car/name
}</ul>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<ul>
<name language="en">name 1</name>
</ul>