2010-12-16 3 views
2

결과 집합을 요소로, 문자열을 args로 사용하고이 문자열을 함수 내부의 선택기로 사용하려는 함수가 있습니다.문자열을 xpath 선택자로 사용합니다.

function abc ($results as element()*, $element as xs:string) 
{ 
    for $g in distinct-values($results//*[name() = $element]) (: $results//genre :) 
    let $c := //$results[? = $g]        (: //$results[genre=$g] :) 

} 

'?'대신 표시 할 내용 변수 '$의 C'의 자리에 있어야 무엇

+0

좋은 질문입니다. +1. 귀하의 질문은 잘 설명되어 있지 않지만, 제 대답에서 추측하고 유용하게 사용할 수있는 코드로 변경하려고했습니다. :) –

+0

XQuery 설명에 대한 좋은 점은 당신이 사방에 웃는 얼굴을 가지고 있다는 것입니다 ... – LarsH

답변

2
function abc ($results as element()*, $element as xs:string) 
{ 
    for $g in distinct-values($results//*[name() = $element]) (: $results//genre :) 
    let $c := //$results[? = $g]        (: //$results[genre=$g] :) 

} 

'?' 변수 '$의 C'에

쓰는 구문 오류입니다 :

//$results 

이 질문은 다소 모호하지만 요소 그룹에 당신이 원하는 것을 나에게 보인다 , genre (또는 $element - BTW로 정의 된 요소 이름)에 따라 $results에 포함되어 있습니다.이 이름은 빠릅니다 (요소는 문자열이 아닙니다). $elementName을 더 잘 사용하십시오.

다른 관련된 사실은 당신이 $results에있는 각 요소에 의해 topped 전체 하위 트리를 확인 - 이것은 그들이 여러 genre (또는 무엇이든) 후손을 가질 수 있다는 것을 의미한다.

는 마무리하려면 내 마구, 당신이 원하는 날 것으로 보인다 추측 :이 $subElementName$elems의 요소 중 하나가이 아이의 이름임을 알고있는 경우

function grouping-Keys ($elems as element()*, $subElementName as xs:string) as element()* 
{ 
    for $g in distinct-values($elems//*[name() = $subElementName ]) 
    return 
     $elems[//*[name() = $subElementName ] = $g][1]  
} 

위의 함수는 다음과 같이 더 잘 작성되어야합니다.

function grouping-Keys ($elems as element()*, $childElementName as xs:string) as element()* 
{ 
    for $g in distinct-values($elems/*[name() = $childElementName ]) 
    return 
     $elems[/*[name() = $subElementName ] = $g][1]  
} 

위의 함수는 모두 장르의 고유 값 (또는 whatev 어). $elems의 모든 요소에 장르 (또는 기타)라는 하나의 하위 (하위)가있는 것으로 알려져 있으면 (보장)이 함수의 결과는 중복되지 않습니다.

+1

+1 좋은 추측! ;) –

관련 문제