XQuery要素と属性の追加

XMLインスタンスドキュメント

以下の例では、この「books.xml」ドキュメント(前の章で使用した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>Everyday Italian. カテゴリ:料理</li>
<li>Harry Potter. カテゴリ: 子供</li>
<li>Learning XML. カテゴリ: WEB</li>
<li>XQuery Kick Start. カテゴリ: WEB</li>
</ul>
</body>
</html>

HTML要素に属性を追加

次に、category属性をHTMLリストのclass属性として使用する方法を見てみましょう:

<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">ハリ・ポッター</li>
<li class="WEB">Learning XML</li>
<li class="WEB">XQuery Kick Start</li>
</ul>
</body>
</html>