2010-12-16 165 views
2

J'ai une fonction qui prend le jeu de résultats en tant qu'élément et une chaîne en tant qu'args et je veux utiliser cette chaîne comme sélecteur dans la fonction.chaîne comme sélecteur 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] :) 

} 

ce qui devrait être à la place de '?' dans la variable '$ c'

+0

Bonne question, +1. Votre question n'est pas très bien spécifiée, mais dans ma réponse j'ai essayé de deviner et de changer votre code en quelque chose qui pourrait être utile. :) –

+0

La bonne chose à propos des commentaires XQuery est que vous avez des visages souriants partout ... – LarsH

Répondre

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] :) 

} 

ce qui devrait être à la place de '? à variable '$ c'

Il est une erreur de syntaxe pour écrire:

//$results 

Cette question est assez vague, mais il me semble que vous voulez regrouper les éléments , contenu dans $results selon leur genre (ou quel que soit le nom de l'élément défini par $element - BTW ce nom suce (un élément n'est pas une chaîne) - mieux utiliser $elementName).

L'autre fait est en ce qui concerne que vous vérifiez les sous-arbres complets surmontées de chacun des éléments dans $results - cela signifie qu'ils peuvent avoir plusieurs descendants genre (ou autre).

Finaliser ma frénésie deviner, il me semble que vous voulez ceci:

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

Si on sait que $subElementName est un nom d'un enfant que l'un des éléments de $elems ont , le ci-dessus devrait être mieux écrit:

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

les deux fonctions ci-dessus renvoient un élément par une (valeur distincte de) genre (ou whatev er). S'il est connu (garanti) que chaque élément de $elems a exactement un enfant (descendant) nommé genre (ou autre), alors les résultats de ces fonctions ne sont pas redondants.

+1

+1 Bonne estimation! ;) –