XML/XQuery/output

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

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>