32.6. 표현식
32.6.1. 결과 유형
기본적으로 Cryostat 표현식은 org.w3c.dom.NodeList
유형의 하나 이상의 XML 노드 목록을 반환합니다. 그러나 형식 변환기 메커니즘을 사용하여 결과를 다른 형식으로 변환할 수 있습니다. Java DSL에서는 xpath()
명령의 두 번째 인수에 결과 유형을 지정할 수 있습니다. 예를 들어 Cryostat 표현식의 결과를 문자열로 반환하려면 다음을 수행합니다.
xpath("/person/name/text()", String.class)
XML DSL에서는 다음과 같이 resultType
속성에 결과 유형을 지정할 수 있습니다.
<xpath resultType="java.lang.String">/person/name/text()</xpath>
32.6.2. 위치 경로의 패턴
다음 패턴을 사용하여 location path로 이동할 수 있습니다.
/people/person
기본 위치 경로는 특정 요소의 중첩된 위치를 지정합니다. 즉, 이전 위치 경로는 다음 XML 조각의 person 요소와 일치합니다.
<people> <person>...</person> </people>
이 기본 패턴은
people
요소 내부에 두 개 이상의person
요소가 있는 경우 이 기본 패턴을 여러 개의 노드 Cryostat와 일치시킬 수 있습니다./name/text()
-
요소 내부의 텍스트에 액세스하려는 경우
/ text ()
를 위치 경로에 추가합니다. 그렇지 않으면 노드에 요소의 시작 및 끝 태그가 포함됩니다(노드를 문자열로 변환할 때 이러한 태그가 포함됩니다). /person/telephone/@isDayTime
특성의 값을 선택하려면 AttributeName 구문을 사용합니다.
@AttributeName
. 예를 들어 이전 위치 경로는 다음 XML 조각에 적용할 때true
를 반환합니다.<person> <telephone isDayTime="true">1234567890</telephone> </person>
*
-
지정된 범위의 모든 요소와 일치하는 와일드카드입니다. 예를 들어
/people/person/\*
는사람의
모든 자식 요소와 일치합니다. @*
-
일치하는 요소의 모든 특성과 일치하는 와일드카드입니다. 예를 들어
/ person/name/@\*
는 일치하는 모든name
요소의 모든 특성과 일치합니다. //
모든 중첩 수준의 위치 경로와 일치합니다. 예를 들어
//name
패턴은 다음 XML 조각에서 강조 표시된 모든name
요소와 일치합니다.<invoice> <person> <name .../> </person> </invoice> <person> <name .../> </person> <name .../>
..
- 현재 컨텍스트 노드의 부모를 선택합니다. 현재 컨텍스트 노드가 상위가 없는 문서 루트이므로 일반적으로 Apache Camel Cryostat 언어에서는 유용하지 않습니다.
node()
- 모든 종류의 노드와 일치합니다.
text()
- 텍스트 노드와 일치합니다.
comment()
- 주석 노드와 일치합니다.
processing-instruction()
- processing-instruction 노드를 일치시킵니다.
32.6.3. 서술자 필터
대괄호로 대괄호로 묶어 위치 경로와 일치하는 노드 세트를 필터링할 수 있습니다. [Predicate]
. 예를 들어, N ]을 위치 경로에 추가하여 일치 목록에서N
th 노드를 선택할 수 있습니다. 다음 표현식은 일치하는 첫 번째 person
요소를 선택합니다.
/people/person[1]
다음 표현식은 두 번째-last person
요소를 선택합니다.
/people/person[last()-1]
특성 값을 테스트하여 특정 특성 값이 있는 요소를 선택할 수 있습니다. 다음 표현식은 surname
속성이 Strachan 또는 Davies인 name
요소를 선택합니다.
/person/name[@surname="Strachan" or @surname="Davies"]
연산자와 ,not()
중 하나를 사용하여 서술자 표현식을 결합할 수 있으며
, 비교기를 사용하여 식을 비교할 수 있습니다. = !
, > , >= , >= , < , , Cryostat (실실에서 더 적은 기호는 < 엔티티로 대체되어야 =
함
)
서술자 필터에서 Cryostat 함수를 사용할 수도 있습니다.
32.6.4. Axes
XML 문서의 구조를 고려할 때 루트 요소에는 하위 시퀀스가 포함되어 있으며 일부 자식 요소에는 추가 하위 요소가 포함됩니다. 이 방법으로 중첩된 요소가 자식 관계에 의해 함께 연결되는 경우 전체 XML 문서에는 트리 구조가 있습니다. 이제 이 요소 트리에서 특정 노드를 선택하는 경우( 컨텍스트 노드라고 함) 선택한 노드를 기준으로 트리의 다른 부분을 참조할 수 있습니다. 예를 들어 컨텍스트 노드의 하위 노드, 컨텍스트 노드의 부모 또는 컨텍스트 노드(형제 노드)와 동일한 부모를 공유하는 모든 노드를참조할 수 있습니다.
Cryostat 축 은 현재 컨텍스트 노드를 기준으로 노드 트리의 특정 부분으로 검색을 제한하여 일치하는 노드 범위를 지정하는 데 사용됩니다. 축은 구문을 사용하여 일치시킬 노드 이름에 접두사로 연결되어 있습니다. 즉, < matchingNode
> 구문을 사용합니다. 예를 들어 child::
축을 사용하여 다음과 같이 현재 컨텍스트 노드의 자식을 검색할 수 있습니다.
/invoice/items/child::item
child::item
의 컨텍스트 노드는 경로 /invoice/
.에서 선택한 항목 요소입니다. items
child::
axis는 검색을 컨텍스트 노드 항목의
하위 항목으로 제한하여 자식::
이 이름이 지정된 항목의 하위 item
항목과
일치하도록 합니다. 실제로 child::
축은 기본 축이므로 앞의 예제를 다음과 같이 작성할 수 있습니다.
/invoice/items/item
그러나 몇 가지 다른 축(all)이 있고, 그 중 일부는 이미 축약된 형태로 표시됩니다. @
는 특성::
의 약어이며 //
는 하위 항목 또는 자체::
의 약어입니다. 전체 축 목록은 다음과 같습니다(자세한 내용은 아래 참조 참조 참조).
-
ancestor
-
ancestor-또는-self
-
attribute
-
child
-
descendant
-
descendant-or-self
-
팔로우
-
Next-sibling
-
네임스페이스
-
상위
-
이전 버전
-
preceding-sibling
-
self
32.6.5. 함수
Cryostat는 서술자를 평가할 때 유용할 수 있는 작은 표준 함수 세트를 제공합니다. 예를 들어 노드 세트에서 마지막으로 일치하는 노드를 선택하려면 다음과 같이 last() 함수를 사용하여 노드 세트의 마지막 노드의 인덱스를 반환할 수 있습니다.
/people/person[last()]
앞의 예제에서 시퀀스에서 마지막 person
요소를 선택합니다(문서 순서대로).
Cryostat가 제공하는 모든 기능에 대한 자세한 내용은 아래 참조를 참조하십시오.
32.6.6. reference
Cryostat 문법에 대한 자세한 내용은 XML 경로 언어, 버전 1.0 사양을 참조하십시오.