0

在此处输入图像描述

上述结构父级的路径:pdf文件夹,是-> /content/dam/example/corporate/pdf ,pdf文件夹的值为,jcr:primarytype 其他 Sling:OrderedFolder两个文件夹'2013''2014'也是如此...... 在此处输入图像描述

如果父“pdf”是页面类型,我确切地知道如何迭代页面结构并使用 jcr node api 检索子节点的属性信息。

但不幸的是'pdf'是一个有序文件夹类型......

我现在需要的是,遍历结构并检索所有 PDF 路径并存储到一个ArrayList,例如,'2013exampleOne.pdf' 节点的/content/dam/example/corporate/pdf/2013exampleOne.pdf路径是,'2014examplePDFTwo.pdf' 的路径是/content/dam/example/corporate/pdf/2014examplePDFTwo.pdf......等等。 . (此列表可能会为应用程序的其他部分提供服务以稍后下载 pdf,但这与我当前的问题无关......)

这是我自己的尝试代码(请注意,这只是我的 servlet 的一部分,):

   @Override
        protected void doGet(final SlingHttpServletRequest request,
                final SlingHttpServletResponse response) throws ServletException,
                IOException {
....//some more code
....
....
....
            final ResourceResolver resourceResolver = request.getResourceResolver();
            Node pdfJcrNode = resourceResolver.resolve("/content/dam/example/corporate/pdf").adaptTo(Node.class);

            NodeIterator yearChildrenNodes;
            try {
                yearChildrenNodes = pdfJcrNode.getNodes();
                while(yearChildrenNodes.hasNext()){
                    Node yearItemNode = yearChildrenNodes.nextNode();
                    while(yearItemNode.getNodes().hasNext()){
                        String pdfNodeAssetString = yearItemNode.getNodes().nextNode().getProperty("jcr:primaryType").getString();
                        if(pdfNodeAssetString.equals("dam:Asset")){
                            pdfPathList.add(yearItemNode.getNodes().nextNode().getPath().toString());
                        }
                    }
                }
            } catch (RepositoryException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
....
....
....
....//some more code
}

再次,父文件夹“pdf”的路径是/content/dam/example/corporate/pdf

有什么建议可以帮助我吗?谢谢

ps:请提供代码示例以帮助,干杯

4

1 回答 1

1

为什么不使用查询?

路径:

/jcr:root/content/dam/example/corporate/pdf//*[jcr:primaryType='dam:Asset']

您可以像这样使用 QueryManager:

Session session = resourceResolver.adaptTo(Session.class)   
QueryManager qm = session.getWorkspace().getQueryManager();
Query q = qm.createQuery("/jcr:root/content/dam/example/corporate/pdf//*[jcr:primaryType='dam:Asset']", "xpath");
QueryResult result = q.execute();
NodeIterator nIt = result.getNodes();

有了这个,你可以迭代节点。

对您的代码还有一点点说明,您正在使用 nextNode() 两次。因此,您在不检查是否存在 nextNode 的情况下进一步迭代。

于 2014-07-15T14:48:56.710 回答