Chọn và lọc trong XQuery

Tệp văn bản XML mẫu

Chúng ta sẽ tiếp tục sử dụng tệp "books.xml" trong ví dụ sau (cùng với tệp XML được sử dụng trong các chương trước).

Xem tệp "books.xml" trong trình duyệt của bạn.

Chọn và lọc phần tử

Như đã thấy trong các chương trước, chúng ta sử dụng biểu thức đường dẫn hoặc biểu thức FLWOR để chọn và lọc các phần tử.

Xin xem biểu thức FLWOR dưới đây:

for $x in doc("books.xml")/bookstore/book
nếu $x/price>30
sắp xếp theo $x/title
return $x/title
for
(tùy chọn) Gắn một biến vào mỗi mục được trả về bởi biểu thức in
cho
(tùy chọn)
nếu
(tùy chọn) Đặt một điều kiện
sắp xếp theo
(tùy chọn) Đặt thứ tự sắp xếp của kết quả
trả về
định nghĩa nội dung cần trả về trong kết quả

câu lệnh for

Câu lệnh for có thể gắn biến vào mỗi mục được trả về bởi biểu thức in. Câu lệnh for có thể tạo ra sự lặp lại. Có thể có nhiều câu lệnh for trong cùng một biểu thức FLWOR.

Nếu bạn muốn lặp lại một số lần cụ thể trong một câu lệnh for, bạn có thể sử dụngtừ khóa đến

cho $x trong (1 đến 5)
return <test>{$x}</test>

Kết quả:

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

Từ khóa at Dùng để tính toán việc lặp lại:

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

Kết quả:

<book>1. Ý nghĩa hàng ngày của Ý</book>
<book>2. Harry Potter</book>
<book>3. XQuery Kick Start</book>
<book>4. Học XML</book>

Trong câu lệnh for cũng vậyCho phép nhiều biểu thức inVui lòng sử dụng dấu phẩy để phân tách mỗi biểu thức in:

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

Kết quả:

<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>

Câu lệnh let

Câu lệnh let có thể hoàn thành việc phân phối biến và tránh việc lặp lại nhiều lần cùng một biểu thức. Câu lệnh let không gây ra sự lặp lại.

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

Kết quả:

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

Câu lệnh where

Câu lệnh where được sử dụng để đặt một hoặc nhiều điều kiện (criteria) cho kết quả.

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

Câu lệnh order by

Câu lệnh order by được sử dụng để quy định thứ tự sắp xếp của kết quả. Ở đây, chúng ta sẽ sắp xếp kết quả dựa trên category và title:

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

Kết quả:

<title lang="en">Harry Potter</title>
<title lang="vi">Ý nghĩa hàng ngày của Ý</title>
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>

Câu lệnh return:

Câu lệnh return quy định nội dung cần trả về.

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

Kết quả:

<title lang="vi">Ý nghĩa hàng ngày của Ý</title>
<title lang="en">Harry Potter</title>
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>