2014-02-20 4 views
3

나는이 XML이있는 경우 :이 상황에서 Xpath 쿼리 - 그룹 값?

<Events> 
    <Properties> 
     <Property Descriptor="100">1377349460.298</Property> 
     <Property Descriptor="101">1</Property> 
     <Property Descriptor="24000">C1234Test1</Property> 
    </Properties> 
    <Properties> 
     <Property Descriptor="100">1377349462.298</Property> 
     <Property Descriptor="101">1</Property> 
     <Property Descriptor="24000">C4321Test2</Property> 
    </Properties> 
    <Properties> 
     <Property Descriptor="100">1377349462.300</Property> 
     <Property Descriptor="101">1</Property> 
     <Property Descriptor="24000">C1234Test1</Property> 
    </Properties> 
</Events> 

하는 방법은 Descriptor="100"이 속성의 처음 다섯 개 문자를 고려하고 각 Descriptor="24000"의 첫 발생을 선택할 수 있습니다? 예를 들어 [C1234의 경우] 1377349460.298 만 선택하고 [C4321의 경우] 1377349462.298 만 선택 하시겠습니까?

XPath는 2.0

내가 어떻게 그것을 시도하는 아무 생각이 ... 사전에

감사합니다!

+0

일부 설명 : XML 형식이 올바르지 않습니다 (단일 루트 요소 만 허용). 또한 처음 네 글자 만 원하십니까? 입력을 통해 내가 5를 원한다고 추측 할 수 있습니다 (어쨌든 네 대답은 내 답변이지만, 변경하기 쉽습니다). 그리고 실제로 정답을 테스트하는 기능을하기 위해 마지막 몇 자리의 문자 위치가 실제로 다른 ID를 여기에 제시하는 것이 합리적 일 수 있습니다. –

+0

1 - 맞습니다. 5 자입니다. 2 - C4321의 경우 "Test1"대신 "Test2"로 편집 됨 3 - 상위 노드가 추가됨. –

답변

2

일치하는 식별자를 모두 찾은 다음 각각에 대해 첫 번째 결과를 찾습니다.

for $id in distinct-values(//Property[@Descriptor=24000]/substring(., 1, 4)) 
return 
    //Properties[Property[@Descriptor=24000 and starts-with(., $id)]][1] 
     /Property[@Descriptor=100]