0

是否可以在 Adob​​e 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)。

4

1 回答 1

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 .

(如果要在结果中包含原始元素,可以省略“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())]
于 2016-10-24T11:02:10.743 回答