2016-10-24 3 views
0

Est-il possible de trouver des frères et soeurs de même nom à l'aide de SQL2, SQL, XPath ou QueryBuilder dans Adobe CQ5/Adobe Experience Directeur. Nous essayons de préparer l'instance pour la mise à niveau vers AEM 6.X et comme déjà connu, jackrabbit oak a désactivé le support pour SNS, ce qui rend impossible la mise à niveau sans résoudre ce problème. Le référentiel a pu être parcouru récursivement, mais c'est trop lent et je cherche de meilleures options en utilisant des requêtes. SNS sont définis comme suit:Rechercher des frères et sœurs identiques (SNS) à l'aide de requêtes SQL2, SQL, XPath ou QueryBuilder dans CQ5/AEM

/a/b/c 
/a/b/c[2] 
/a/b/c[3] 

/a/b[2]/c[2] 
/a/b/c[3] 

Je préférerais SQL2, mais toute autre option est également possible. Notez qu'aucune fonction ou xslt n'est possible, car nous ne parlons pas de documents XML, mais de java content repository (JCR).

+0

S'il vous plaît être plus précis sur vos besoins. Par exemple, recherchez-vous les frères et soeurs d'un même élément, ou tous les autres frères et soeurs dans le document entier? –

+0

Merci pour votre commentaire. Je parle de CQ5/AEM. Ces balises sont également définies dans la question. C'est un problème connu là-bas, donc je n'ai pas vu le besoin d'être plus précis car cela devrait être assez clair pour les personnes travaillant avec le système. Puisque vous n'avez clairement pas compris ce que sont exactement les exigences, je trouve votre commentaire ici et la demande d'amélioration, mais votre réponse ci-dessous et votre downvote ne sont pas appropriés. Merci quand même pour votre temps! – d33t

Répondre

1

Dans XQuery 1.0 ou XPath 3.0 les frères et soeurs du même nom du noeud contextuel peut être trouvé que

let $n := node-name(.) 
return (preceding-sibling::* | following-sibling::*)[node-name(.) = $n] 

ou

let $n := node-name(.) 
return ../*[node-name(.) = $n] except . 

(le « sauf. » Peut être omis si vous vouloir inclure l'élément original dans le résultat).

Je ne pense pas que pure solution XPath 1.0 est possible, en raison de l'absence de variables de gamme, mais avec XPath 1.0 au sein de XSLT 1.0, vous pouvez faire

(preceding-sibling::* | following-sibling::*) 
[local-name(.) = local-name(current()) and 
    namespace-uri(.) = namespace-uri(current())]