2011-02-22 3 views
0

다른 pgnr 속성의 값을 가진 속성 pgnr을 가진 구매 노드를 선택하고 싶습니다. "KEY"가있는 startig는 "c"와 함께 concatenated됩니다.XPath를 사용하여 다른 노드에서 참조하는 노드를 선택하는 방법은 무엇입니까?

예 : pgnr-속성을 구입 노드가 "키"로 시작하기 때문에이 경우

<root> 
<purchact hhid="xxx"> 
    <purchase pgnr="41"> 
    <purchvalues field_name="Number" field_value="1"/> 
    </purchase> 
    <purchase pgnr="KEY9802"> 
    <purchvalues field_name="Number" field_value="2"/> 
    </purchase> 
<purchase pgnr="9802c"> 
    <purchvalues field_name="Number" field_value="3"/> 
    </purchase> 
</purchact> 
</root> 

, 나는의 pgnr-속성 "9802c"을 구입 노드를 찾고 있어요이있다 뒤에 오는 특성 "9802"로.

나는
root/purchact/purchase[@pgnr=concat(substring-after(@pgnr, "KEY"), "c")] 

을 시도했지만 작동하지 않습니다.

아무도 도와 줄 수 있습니까? 정말 고마워!

+0

내가 원하는 요소를 모두 올바르게 선택했는지 확인하십시오. –

답변

1
root/purchact/purchase[ 
    @pgnr = concat(
     substring-after(
      ../purchase[ 
       contains(@pgnr, 'KEY') 
       ]/@pgnr, 
      'KEY' 
      ) 
     , 'c') 
    ] 
+0

그게 전부 였어. 고마워요! – Guenter

+0

@Guenter, 대답을 수락하고 upvote 것을 잊지 마세요. 천만에요. – Flack

+0

죄송합니다, 새로운 여기 있어요. 수락되었지만 올바른 해결책으로 평판이 거의 없으므로 upvote – Guenter

2

이 XPath 표현 :

root/purchact/purchase[ 
    @pgnr[substring(.,string-length()) = 'c'] 
][ 
    concat(
     'KEY', 
     substring-before(
     @pgnr, 
     'c' 
    ) 
    ) = ../purchase/@pgnr 
] 

의미 'c'와 거기 느릅 위해 끝나는 @pgnr 특성을 갖는 purchase 요소를 적어도 하나의 다른 형제 purchase 요소에 속하는 인 @pgnr 특성 'KEY' 및 주어진 @pgnr의 문자열을 'c' 전에 합친 것과 같습니다.

+0

+1입니다. – Flack

관련 문제