是否可以在Adobe CQ5 / Adobe 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)。
答案 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())]