2011-11-24 3 views
0

의 다른 부분에서 참조 이전 컨텍스트 내가 그들을 특정 요소에 초점을 분석하고 싶습니다 :XPath는 2.0 :는 XPath에서 XPath 식

... 
<field>aaa</field> 
... 
<field>bbb</field> 
... 
<field>aaa (1)</field> 
... 
<field>aaa (2)</field> 
... 
<field>ccc</field> 
... 
<field>ddd (7)</field> 

내가 (떨어져에서 텍스트 내용의 요소를 찾으려면 가능한 열거, 고유, CCC 및 DDD를 내지 bbb 될 것 aboce 예에서

는 다음의 XPath 나에게 고유 한 값이 제공

:..

이제
distinct-values(//field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '('))) 

내가 좋아하는 것 정도를하는 nd는 모든 고유 한 값에 대해 다른 XPath를 수행합니다. 이는 두 필드 중 어느 필드에서 시작해야하는지 계산하고 개수가 1보다 큰 필드를 검색하는 것입니다.

이러한 필드 내용은 해당 필드 내용과 같을 수 있습니다 값을 가져 오거나, 그 값을 witrh 시작하고 "(". 문제는 해당 XPath의 두 번째 부분에서 해당 부분의 컨텍스트와 이전 컨텍스트를 동시에 참조해야한다는 것입니다.

다음 XPath에서 "-"대신 "-"을 사용합니다. 문맥 사용으로 c_outer와 c_inner를 사용하십시오 :

distinct-values(//field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '(')))[count(//field[(c_inner = c_outer) or starts-with(c_inner, concat(c_outer, ' ('))]) > 1] 

"."을 사용할 수 없습니다. 두 가지 모두 명백한 이유 때문입니다. 그러나 내면의 표현 내에서 외적 표현과 특정 또는 현재의 고유 한 가치를 어떻게 참조 할 수 있습니까?

심지어 가능할까요?

답변

0

XQuery는이를 수행 할 수 있습니다.

for $s 
    in distinct-values(
    //field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '('))) 
    where count(//field[(. = $s) or starts-with(., concat($s, ' ('))]) > 1 
    return $s 
+0

나는 carrefully 시도해 보지 않았지만, 나는 그런 식으로, 당신은 루프에 대한 두 succesive와 XPath를 2.0으로 그것을 할 수 있다고 생각 : 별개의-값 ( // 필드 [경기에서 $의 (대한 // 필드 [(. = $ s) 또는 시작 부분에 $ y가있는 정규화 된 공백 (.), '\ ([0-9] \) $' ($ s, '('))] $ s를 반환 [count ($ y)> 1] –