我有一个函数,它将结果集作为元素,将字符串作为args,我希望将此字符串用作函数内的选择器。
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 :(得分: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
中包含的元素进行分组by $element
- BTW这个名字很糟糕(一个元素不是一个字符串) - 更好地使用$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]
}
上述两个函数每个(不同的)类型(或其他)返回一个元素。如果已知(保证)$elems
中的每个元素都只有一个子(后代)命名为genre(或其他),则这些函数的结果不是多余的。