2010-12-16 50 views
2

我有一個函數,它將結果集作爲元素和一個字符串作爲參數,我希望將此字符串用作函數內的選擇器。字符串作爲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。你的問題沒有被很好的說明,但是在我的回答中,我試圖猜測並將你的代碼變成可能有用的東西。 :) – 2010-12-16 03:28:31

+0

關於XQuery評論的好處是,你到處都有笑臉...... – LarsH 2010-12-16 16:48:22

回答

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 

這個問題是相當含糊,但你要在我看來,以組元素,包含在$results根據他們的genre(或任何元素名稱定義$element - 順便說一句,這個名字很爛(一個元素不是字符串) - 更好地使用$elementName)。

其他有關的事實是您檢查每個元素在$results榮登完整的子樹 - 這意味着他們可能有多個genre(或其他)的後裔。

要完成我的猜測熱潮,在我看來,你想這樣的:

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]  
} 

如果已知$subElementName是孩子$elems任何元素有一個名字,那麼上述應更好地寫爲:

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 ER)。如果已知(保證)$elems中的每個元素都恰好具有一個子類(後代)命名流派(或其他),則這些函數的結果不是多餘的。

+1

+1好猜! ;) – 2010-12-16 14:25:28