在CQ5 / AEM中使用SQL2,SQL,XPath或QueryBuilder查询查找同名兄弟姐妹(SNS)

时间:2016-10-24 08:56:39

标签: xpath cq5 aem query-builder jcr-sql2

是否可以在Adobe CQ5 / Adob​​e Experience Manager中使用SQL2,SQL,XPath或QueryBuilder查找同名兄弟姐妹(SNS)。我们正在尝试准备升级到AEM 6.X的实例,并且已知的jackrabbit oak已禁用对SNS的支持,这使得升级无法解决此问题。存储库可以递归遍历,但这太慢了,我正在寻找使用查询的更好选项。 SNS定义如下:

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

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

我更喜欢SQL2,但任何其他选项也是可能的。 请注意,没有函数或xslt是可能的,因为我们不是在讨论xml文档,而是在讨论java内容库(JCR)。

1 个答案:

答案 0 :(得分:1)

在XQuery 1.0或XPath 3.0中,可以找到上下文节点的同名兄弟节点

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

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

("除了。"如果你想在结果中包含原始元素,可以省略。)

我不认为纯XPath 1.0解决方案是可行的,因为缺少范围变量,但是在XSLT 1.0中你可以使用XPath 1.0

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