연산자 및 특수 문자
XPath 식은 다음 표에 나와 있는 연산자 및 특수 문자를 사용하여 생성됩니다.
/ |
자식 연산자. 왼쪽 컬렉션의 바로 아래 자식을 선택합니다.이 경로 연산자가 패턴 시작 부분에 표시된 경우 루트 노드에서 자식을 선택해야 함을 나타냅니다. |
// |
재귀적 상속. 모든 수준에서 지정된 요소를 검색합니다.이 경로 연산자가 패턴 시작 부분에 표시된 경우 루트 노드에서의 재귀적 상속을 나타냅니다. |
. |
현재 컨텍스트를 나타냅니다. |
.. |
현재 컨텍스트 노드의 부모입니다. |
* |
와일드카드. 요소 이름에 상관없이 모든 요소를 선택합니다. |
@ |
특성. 특성 이름에 대한 접두사입니다. |
@* |
특성 와일드카드. 이름에 상관없이 모든 특성을 선택합니다. |
: |
네임스페이스 구분 기호. 요소 또는 특성 이름과 네임스페이스 접두사를 구분합니다. |
( ) |
연산을 그룹화하여 우선 순위를 명시적으로 설정합니다. |
[ ] |
필터 패턴을 적용합니다. |
[ ] |
아래 첨자 연산자. 컬렉션 내의 인덱싱에 사용됩니다. |
+ |
더하기를 수행합니다. |
- |
빼기를 수행합니다. |
div |
IEEE 754에 따라 부동 소수점 나누기를 수행합니다. |
* |
곱하기를 수행합니다. |
mod |
잘라낸 나누기의 나머지를 반환합니다. |
이 테이블에는 부울 및 집합 연산자가 포함되어 있지 않습니다. 이 사항은 부울, 비교 및 집합 식 또는 집합 연산에 나열되어 있습니다.
다음 표에는 우선 순위가 높은 것부터 순서대로 정의되어 있습니다.
우선 순위 |
문자 |
목적 |
---|---|---|
1 |
( ) |
그룹화 |
2 |
[ ] |
필터 |
3 |
/ // |
경로 연산 |
그룹 연산자 ()는 최상위 경로 식에만 적용할 수 있습니다.예를 들어, (//author/degree | //author/name) 식은 유효한 그룹화 연산이지만 //author/(degree | name) 식은 그렇지 않습니다.
필터 패턴 연산자([])의 우선 순위는 경로 연산자(/ 및 //)보다 높습니다.예를 들어, //comment()[3] 식은 문서에서 주석의 부모에 상대적으로 인덱스가 3인 모든 주석을 선택합니다.이 식은 부모에 상대적인 모든 주석 집합에서 세 번째 주석을 선택하는 (//comment())[3] 식과 다릅니다.첫 번째 식은 주석을 둘 이상 반환할 수 있지만 두 번째 식은 주석을 하나만 반환할 수 있습니다.
이 참조서 전체에 걸쳐 이러한 연산자와 특수 문자에 대해 자세히 설명합니다.
경로 연산자
경로 연산자(/ 및 //)를 사용하여 특정 형식의 요소 컬렉션을 결정할 수 있습니다.이 연산자에는 인수로서 선택을 수행할 "왼쪽" 컬렉션과 선택할 요소를 나타내는 "오른쪽" 컬렉션이 있습니다.자식 연산자(/)는 왼쪽 컬렉션의 바로 아래 자식에서 선택하며 하위 연산자(//)는 왼쪽 컬렉션의 임의의 하위 항목에서 선택합니다.실제로 계층 구조에서 //는 하나 이상의 수준을 대체합니다.
경로 연산자는 쿼리를 수행할 때 컨텍스트를 변경합니다.경로 연산자를 함께 연결하여 문서 트리를 살펴볼 수 있습니다.
예제
식 |
참조 항목 |
---|---|
author/first-name |
현재 컨텍스트 노드의 <author> 요소 내에 있는 모든 <first-name> 요소 |
bookstore//title |
<bookstore> 요소(임의의 하위 항목)에서 수준이 하나 이상인 모든 세부 <title> 요소.이 요소는 bookstore/*/title 패턴과 다릅니다. |
bookstore/*/title |
<bookstore> 요소의 최하위인 모든 <title> 요소 |
bookstore//book/excerpt//emph |
<bookstore> 요소 내에 있는 <book> 요소의 <excerpt> 자식 내에 있는 모든 <emph> 요소 |
.//title |
현재 컨텍스트에서 수준이 하나 이상인 모든 세부 <title> 요소.이 상황은 유일하게 기간 노테이션이 필요한 경우입니다. |
와일드카드 문자
와일드카드(*) 컬렉션으로 대체함으로써 이름을 사용하지 않고도 요소를 참조할 수 있습니다.* 컬렉션은 태그 이름에 상관없이 현재 컨텍스트의 모든 자식 요소를 참조합니다.
예제
식 |
참조 항목 |
---|---|
author/* |
<author> 요소의 모든 요소 자식 |
book/*/last-name |
<book> 요소의 최하위인 모든 <last–name> 요소 |
*/* |
현재 컨텍스트의 모든 최하위 요소 |
my:book |
my 네임스페이스의 <book> 요소 |
my:* |
my 네임스페이스의 모든 요소 |
*:book 패턴은 지원되지 않습니다.
특성
XPath는 @ 기호가 있는 특성 이름을 나타냅니다.특성 및 자식 요소는 공평하게 처리되며 두 형식 간의 기능은 가능한 한 같습니다.
참고
특성은 자식 요소를 포함할 수 없으므로 특성에 경로 연산자를 적용하면 구문 오류가 발생합니다.또한 정의에 따라 특성에 대한 순서가 정의되지 않으므로 특성에 인덱스를 적용할 수 없습니다.
예제
식 |
참조 항목 |
---|---|
@style |
현재 요소 컨텍스트의 style 특성 |
price/@exchange |
현재 컨텍스트 내에 있는 <price> 요소의 exchange 특성 |
book/@style |
모든 <book> 요소의 style 특성 |
특성이 자식을 포함할 수 없으므로 다음 예제는 유효하지 않습니다.
price/@exchange/total
여러 개의 특성 찾기
@*를 사용하여 요소의 모든 특성을 반환할 수 있습니다.특성을 레코드의 필드로 취급하는 응용 프로그램에서 이 기능은 매우 유용합니다.
예제
식 |
참조 항목 |
---|---|
@* |
현재 컨텍스트 노드의 모든 특성 |
@my:* |
my 네임스페이스의 모든 특성.이 특성은 my 네임스페이스의 요소에서 비정규화된 특성을 포함하지 않습니다. |
@*:title 패턴은 지원되지 않습니다.