0

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 を好みますが、他のオプションも可能です。xml ドキュメントについてではなく、Java コンテンツ リポジトリ (JCR) について話しているため、関数や xslt は使用できないことに注意してください。

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 に答える