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 표현식을 허용합니다문자열을 구분하기 위해 쉼표를 사용하십시오:

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="ko">일상 이탈리아</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="ko">일상 이탈리아</title>
<title lang="en">Harry Potter</title>
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>