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
- สำหรับ - (ทางเลือก) ผูกตัวแปรกับแต่ละรายการที่ส่งคืนโดยนิพจน์ใน
- ให้ - (ไม่จำเป็น)
- โดยที่ - (ไม่บังคับ) ระบุเกณฑ์
- เรียงลำดับโดย - (ตัวเลือก) ระบุการเรียงลำดับของผลลัพธ์
- return - ระบุสิ่งที่จะส่งคืนในผลลัพธ์
สำหรับข้อ
คำสั่ง for ผูกตัวแปรกับแต่ละรายการที่ส่งคืนโดยนิพจน์ in ส่วนคำสั่ง for ทำให้เกิดการวนซ้ำ สามารถมีได้หลายส่วนสำหรับอนุประโยคในนิพจน์ FLWOR เดียวกัน
ในการวนซ้ำจำนวนครั้งที่เจาะจงใน for clause คุณสามารถใช้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 clause ใช้เครื่องหมายจุลภาคเพื่อคั่นแต่ละรายการในนิพจน์:
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 $x := (1 to 5)
return <test>{$x}</test>
ผลลัพธ์:
<test>1 2 3 4 5</test>
ที่ไหนข้อ
คำสั่ง where ใช้เพื่อระบุเกณฑ์อย่างน้อยหนึ่งเกณฑ์สำหรับผลลัพธ์:
where $x/price>30 and $x/price<100
คำสั่งตามข้อ
ลำดับตามข้อใช้เพื่อระบุลำดับการจัดเรียงของผลลัพธ์ ที่นี่เราต้องการเรียงลำดับผลลัพธ์ตามหมวดหมู่และชื่อ:
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>
ข้อส่งคืน
ประโยคส่งคืนระบุสิ่งที่จะส่งคืน
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>