2010-12-16 84 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