1

JCR SQL2クエリを使用してJCRで何かを検索する方法を知っています。

ただし、特定のケースでは、 JCR API :javax.jcr.Nodeなどを使用して Java を使用したいと考えていますjavax.jcr.NodeIterator

残念ながら、自分でコーディングして車輪を再発明するだけです。

すでに利用可能なものはありますか ( GistGithubまたはelse)?

4

3 に答える 3

2

そのSlingQueryに使用できます。jQuery に触発され、その構文に従います。トラバーサル クエリは低速であるため、少数のノード (最良の場合は 100 未満) を検索する場合にのみ使用してください。

編集

あなたの例は、次の SlingQueries に変換される可能性があります (テストされていません)。

SlingQuery.$(startResource).find("[name=teasers][title=awesome-teaser]")

SlingQuery.$(startResource).find("[name][controlName]")

SlingQuery はしばらくの間Apache Slingの一部であり、それが github リポジトリが放棄されたように見える理由です。

注: $(resource).find("..."); などの構文で、ドル記号を静的にインポートし、SlingQuery 経由の静的アクセスを削除できます。

于 2016-12-22T12:59:59.527 に答える
2

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());
        }
    }
});
于 2017-03-23T08:01:34.447 に答える