xpath - 如何使用XPath JCR查询访问jcr:root

标签 xpath aem jcr

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

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


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



我的/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是否存在?

最佳答案

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

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

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

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


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

关于xpath - 如何使用XPath JCR查询访问jcr:root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21825575/

相关文章:

osgi - Apache Sling 和 Adob​​e AEM 中的子服务

aem - CQ/AEM Dispatcher 不刷新二进制文件

jackrabbit - JCR Jackrabbit 版本控制

java - 处理 jackrabbit 中的 InvalidItemStateException

java - XPath 选择带有属性的元素

Python selenium 没有找到 css 元素

aem - 如何让组件显示在可拖动组件列表中(对于 parsys)?

java - DMS的JCR与JPA:性能,优点,缺点

python - 1 行(所有数据)到 10 行将数据从 pandas 库拆分到数据帧

xml - 用于选择排除元素的 XPath(具有多个子元素)