JCR SQL2クエリを使用してJCRで何かを検索する方法を知っています。
ただし、特定のケースでは、 JCR API :javax.jcr.Node
などを使用して Java を使用したいと考えていますjavax.jcr.NodeIterator
。
残念ながら、自分でコーディングして車輪を再発明するだけです。
すでに利用可能なものはありますか ( Gist
、Github
またはelse
)?
そのSlingQueryに使用できます。jQuery に触発され、その構文に従います。トラバーサル クエリは低速であるため、少数のノード (最良の場合は 100 未満) を検索する場合にのみ使用してください。
編集
あなたの例は、次の SlingQueries に変換される可能性があります (テストされていません)。
SlingQuery.$(startResource).find("[name=teasers][title=awesome-teaser]")
SlingQuery.$(startResource).find("[name][controlName]")
SlingQuery はしばらくの間Apache Slingの一部であり、それが github リポジトリが放棄されたように見える理由です。
注: $(resource).find("..."); などの構文で、ドル記号を静的にインポートし、SlingQuery 経由の静的アクセスを削除できます。
ItemVisitorを使用して、リポジトリを再帰的に走査し、途中で条件に一致するすべてのアイテムを収集できます。
たとえば、 type のすべてのプロパティを出力しますLong
:
Node root = session.getRootNode();
root.accept(new ItemVisitor() {
@Override
public void visit(Property property) throws RepositoryException {
if (!property.isMultiple() && property.getType() == PropertyType.LONG) {
System.out.println(property.getName() + " = " + property.getLong());
}
}
@Override
public void visit(Node node1) throws RepositoryException {
NodeIterator children = node1.getNodes();
while (children.hasNext()) {
visit(children.nextNode());
}
}
});