Добавление элементов и атрибутов в XQuery

Документ примера XML

В следующем примере мы продолжим использовать этот файл "books.xml" (тот же файл, что и в предыдущих разделах).

Просмотрите файл "books.xml" в вашем браузере.

Добавление элементов и атрибутов в результат

Как мы видели в предыдущем разделе, мы можем ссылаться на элементы и атрибуты из вводного файла в результате:

for $x in doc("books.xml")/bookstore/book/title
order by $x
return $x

Возвращаемый XQuery-выражение цитирует title-элементы и атрибут lang в результате, как показано ниже:

<title lang="en">Everyday Italian</title>
<title lang="en">Harry Potter</title>
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>

Возвращаемый XQuery-выражение генерирует title-элементы и их описание в документе ввода таким же образом.

Теперь мы добавим свои элементы и атрибуты в результат!

Добавление HTML-элементов и текста

Теперь мы добавим HTML-элементы в результат. Мы поместим результат в HTML-список:

<html>
<body>
<h1>Bookstore</h1>
<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li>{data($x/title)}. Категория: {data($x/@category)}</li>
}
</ul>
</body>
</html>

Данный XQuery-выражение генерирует следующий результат:

<html>
<body>
<h1>Bookstore</h1>
<ul>
<li>Каждый день итальянская кухня. Категория: КУХНЯ</li>
<li>Harry Potter. Категория: CHILDREN</li>
<li>Learning XML. Категория: WEB</li>
<li>XQuery Kick Start. Категория: WEB</li>
</ul>
</body>
</html>

Добавление атрибутов к HTML-элементам

Далее, мы будем использовать атрибут category в качестве атрибута class в списке HTML:

<html>
<body>
<h1>Bookstore</h1>
<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li class="{data($x/@category)}">{data($x/title)}</li>
}
</ul>
</body>
</html>

Указанное выражение XQuery может генерировать следующий результат:

<html>
<body>
<h1>Bookstore</h1>
<ul>
<li class="COOKING">Everyday Italian</li>
<li class="CHILDREN">Harry Potter</li>
<li class="WEB">Learning XML</li>
<li class="WEB">XQuery Kick Start</li>
</ul>
</body>
</html>