如何使用XPath JCR Query访问jcr:root

时间:2014-02-17 09:45:43

标签: xpath cq5 jcr

我想在CQ5 dialogs上应用一些java函数。在第一步中,我在myComponent folder中搜索对话框xml文件,如下所示:

NodeIterator tabRequiredFields = getQueryResult("/jcr:root/apps/myProject/pages/myComponent/dialog/jcr:root")

但是此查询不提供任何结果。 crx Xpath工具也没有显示任何结果,请看下面的图片:

enter image description here

我的/jcr:root/apps/myProject/pages/myComponent/dialog.xml看起来像这样:

    <?xml version="1.0" encoding="UTF-8"?>
    <jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
        jcr:primaryType="cq:Dialog"
        stateful="false"
        title="Test"
        .....>
       <items
        jcr:primaryType="cq:Widget"
        xtype="panel">
        ...
        ......
       </items>
      .....
   </jcr:root>

我可以按照以下方式访问items

NodeIterator tabRequiredFields = getQueryResult("/jcr:root/apps/myProject/pages/myComponent/dialog/items")

这很好用。我的问题是:jcr:root的原因是什么?如果jcr:root存在,如何检查?

1 个答案:

答案 0 :(得分:2)

来自jcr:root的名为dialog.xml的XML元素不会在存储库中创建jcr:root节点。它是一个特殊的保留标识符,CRX包管理器将此元素的所有属性和子节点放入一个节点,该节点的名称与没有扩展名的文件名相同(在您的情况下,它将是dialog)。

如果不清楚,请使用CRX DE,打开/apps/myProject/pages/myComponent,看看你能在那里找到什么。这就是为什么你应该在路径的末尾添加/dialog而不是/jcr:root

如果要查找所有对话框,请使用主要类型cq:Dialog,如rakhi4110所示。以下查询:

/jcr:root/apps/myProject/pages//element(*, cq:Dialog)

将返回/apps/myProject/pages(和后代)的所有对话框。