다음을 통해 공유


위치 경로에서 선택 조건자 지정(SQLXML 4.0)

조건자는 SELECT 문의 WHERE 절과 유사하게 축을 기준으로 노드 집합을 필터링합니다. 조건자는 대괄호로 묶어서 지정합니다. 노드 집합의 각 노드를 필터링하기 위해 해당 노드가 컨텍스트 노드로 사용되고 노드 집합의 노드 수가 컨텍스트 크기로 사용되어 조건자 식이 평가됩니다. 노드에 대한 조건자 식이 TRUE로 평가되면 해당 노드가 결과 노드 집합에 포함됩니다.

XPath에서도 위치 기반 필터링이 가능합니다. 숫자로 계산되는 조건자 식이 필요한 서수 노드를 선택합니다. 예를 들어 위치 경로 Customer[3]은 세 번째 고객을 반환하지만, 이와 같은 숫자 조건자는 지원되지 않고 부울 결과를 반환하는 조건자 식만 지원됩니다.

[!참고]

XPath의 이 XPath 구현 제한 사항과 W3C 사양과의 차이점에 대한 자세한 내용은 XPath 쿼리 사용 소개(SQLXML 4.0)을 참조하십시오.

선택 조건자: 예 1

다음 XPath 식(위치 경로)은 현재 컨텍스트 노드에서 CustomerID 특성 값이 ALFKI인 모든 <Customer> 요소의 자식을 선택합니다.

/child::Customer[attribute::CustomerID="ALFKI"]

이 XPath 쿼리에서 child 및 attribute는 축 이름이고, Customer는 노드 테스트(**<element>**가 child 축의 주 노드 유형이므로 Customer가 **<element 노드>인 경우 TRUE)이고, attribute::CustomerID="ALFKI"가 조건자입니다. 조건자에서 attribute는 축이고 CustomerID는 노드 테스트(<attribute>**가 attribute 축의 주 노드 유형이므로 CustomerID가 컨텍스트 노드의 특성인 경우 TRUE)입니다.

축약형 구문을 사용하여 XPath 쿼리를 다음과 같이 지정할 수도 있습니다.

/Customer[@CustomerID="ALFKI"]

선택 조건자: 예 2

다음 XPath 식(위치 경로)은 현재 컨텍스트 노드에서 SalesOrderID 특성 값이 1인 모든 <Order> 손자를 선택합니다.

/child::Customer/child::Order[attribute::SalesOrderID="1"]

이 XPath 식에서 child 및 attribute는 축 이름입니다. Customer, Order 및 SalesOrderID는 노드 테스트이고 attribute::OrderID="1"은 조건자입니다.

축약형 구문을 사용하여 XPath 쿼리를 다음과 같이 지정할 수도 있습니다.

/Customer/Order[@SalesOrderID="1"]

선택 조건자: 예 3

다음 XPath 식(위치 경로)은 현재 컨텍스트 노드에서 하나 이상의 <ContactName> 자식이 있는 모든 <Customer> 자식을 선택합니다.

child::Customer[child::ContactName]

이 예에서는 **<ContactName>**이 XML 문서에서 <Customer> 요소의 자식 요소라고 가정합니다. 주석이 추가된 XSD 스키마에서 이러한 관계를 요소 중심 매핑이라고 합니다.

이 XPath 식에서 child는 축 이름이고, Customer는 노드 테스트(**<element>**가 child 축의 주 노드 유형이므로 Customer가 <element> 노드인 경우 TRUE)이고, child::ContactName이 조건자입니다. 조건자에서 child는 축이고 ContactName은 노드 테스트(ContactName이 <element> 노드인 경우 TRUE)입니다.

이 식은 <ContactName> 요소 자식이 있는 컨텍스트 노드의 <Customer> 요소 자식만 반환합니다.

축약형 구문을 사용하여 XPath 쿼리를 다음과 같이 지정할 수도 있습니다.

Customer[ContactName]

선택 조건자: 예 4

다음 XPath 식은 <ContactName> 요소 자식이 없는 컨텍스트 노드의 <Customer> 요소 자식을 선택합니다.

child::Customer[not(child::ContactName)]

이 예에서는 **<ContactName>**이 XML 문서에서 <Customer> 요소의 자식 요소이며 데이터베이스에 ContactName 필드가 필요 없다고 가정합니다.

이 예에서는 child가 축이고, Customer가 노드 테스트(Customer가 <element> 노드인 경우 TRUE)이고, not(child::ContactName)이 조건자입니다. 조건자에서 child는 축이고 ContactName은 노드 테스트(ContactName이 <element> 노드인 경우 TRUE)입니다.

축약형 구문을 사용하여 XPath 쿼리를 다음과 같이 지정할 수도 있습니다.

Customer[not(ContactName)]

선택 조건자: 예 5

다음 XPath 식은 현재 컨텍스트 노드에서 CustomerID 특성이 있는 모든 <Customer> 자식을 선택합니다.

child::Customer[attribute::CustomerID]

이 예에서 child는 축이고, Customer는 노드 테스트(Customer가 <element> 노드인 경우 TRUE)이고, attribute::CustomerID는 조건자입니다. 조건자에서 attribute는 축이고 CustomerID는 조건자(CustomerID가 <attribute> 노드인 경우 TRUE)입니다.

축약형 구문을 사용하여 XPath 쿼리를 다음과 같이 지정할 수도 있습니다.

Customer[@CustomerID]

선택 조건자: 예 6

다음 예에서 볼 수 있는 것처럼 Microsoft SQLXML 4.0은 조건자에 교차곱을 포함하는 XPath 쿼리를 지원합니다.

Customer[Order/@OrderDate=Order/@ShipDate]

이 쿼리는 OrderDate가 Order 중 하나의 ShipDate와 동일한 Order가 있는 모든 고객을 선택합니다.