XQuery 選擇和過濾

XML實例文檔

我們將在下面的例子中繼續使用這個 "books.xml" 文檔(和上面的章節所使用的 XML 文件相同)。

在您的瀏覽器中查看 "books.xml" 文件

選擇和過濾元素

正如在前面的章節所看到的,我們使用路徑表達式或 FLWOR 表達式來選取和過濾元素。

請看下面的 FLWOR 表達式:

for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
for
(可選) 向每個由 in 表達式返回的項目捆綁一個變量
let
(可選)
where
(可選) 設定一個條件
order by
(可選) 設定結果的排列順序
return
規定在結果中返回的內容

for 語句

for 語句可將變量捆綁到由 in 表達式返回的每個項目。for 語句可產生迭代。在同一個 FLWOR 表達式中可存在多重 for 語句。

如需在一個 for 語句中進行指定次數地循環,您可使用關鍵詞 to

for $x in (1 to 5)
return <test>{$x}</test>

結果:

<test>1</test>
<test>2</test>
<test>3</test>
<test>4</test>
<test>5</test>

關鍵詞 at 可用于計算迭代:

for $x at $i in doc("books.xml")/bookstore/book/title
return <book>{$i}. {data($x)}</book>

結果:

<book>1. Everyday Italian</book>
<book>2. Harry Potter</book>
<book>3. XQuery Kick Start</book>
<book>4. Learning XML</book>

在 for 語句中同樣允許多個 in 表達式。請使用逗號來分割每一個 in 表達式:

for $x in (10,20), $y in (100,200)
return <test>x={$x} and y={$y}</test>

結果:

<test>x=10 and y=100</test>
<test>x=10 and y=200</test>
<test>x=20 and y=100</test>
<test>x=20 and y=200</test>

let 語句

let 語句可完成變量分配,并可避免多次重復相同的表達式。let 語句不會導致迭代。

let $x := (1 to 5)
return <test>{$x}</test>

結果:

<test>1 2 3 4 5</test>

where 語句

where 語句用于為結果設定一個或多個條件(criteria)。

where $x/price>30 and $x/price<100

order by 語句

order by 語句用于規定結果的排序次序。在這里,我們要根據 category 和 title 來對結果進行排序:

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

結果:

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

return 語句:

return 語句規定要返回的內容。

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

結果:

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