如何使用XPath jcr查询访问jcr:root
我想在CQ5如何使用XPath jcr查询访问jcr:root,xpath,aem,jcr,Xpath,Aem,Jcr,我想在CQ5对话框上应用一些java函数。在第一步中,我在myComponent文件夹中搜索对话框xml文件,如下所示: NodeIterator tabRequiredFields = getQueryResult("/jcr:root/apps/myProject/pages/myComponent/dialog/jcr:root") 但此查询不提供任何结果。crx Xpath工具也不显示任何结果,请参见下图: my/jcr:root/apps/myProject/pages/myCom
对话框
上应用一些java函数。在第一步中,我在myComponent文件夹中搜索对话框xml文件,如下所示:
NodeIterator tabRequiredFields = getQueryResult("/jcr:root/apps/myProject/pages/myComponent/dialog/jcr:root")
但此查询不提供任何结果。crx Xpath工具也不显示任何结果,请参见下图:
my/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>
这个很好用。我的问题是:jcr:root的原因是什么?如何检查jcr:root
是否存在?对话框中名为jcr:root
的XML元素。XML
不会在存储库中创建jcr:root
节点。它是一个特殊的保留标识符,CRX软件包管理器将此元素的所有属性和子节点放入一个节点,该节点的名称与文件名相同,没有扩展名(在您的情况下,它将是对话框
)
如果不清楚,请使用CRX DE,打开/apps/myProject/pages/myComponent
,查看在那里可以找到什么。这就是为什么您应该在路径的末尾添加/dialog
,而不是/jcr:root
如果要查找所有对话框,请使用rakhi4110建议的主要类型cq:Dialog
。以下查询:
/jcr:root/apps/myProject/pages//element(*, cq:Dialog)
将返回来自/apps/myProject/pages
(及其子体)的所有对话框。我怀疑dialog.xml是否会以这种方式呈现,至少与我的CQ实例相比,dialog.xml不是这样构造的。据我所知,只有根节点(“/”)在xml中导出为jcr:root。所以这看起来有点奇怪。您能告诉我您使用的是哪一版本的CQ吗?我使用的是cq5.4版本,我的dialog.xml的结构如前所述:)。我想知道,除了jcr:rootWell我使用cq5.5之外,我可以访问所有节点。为什么不试试/jcr:root/apps/myProject/pages/myComponent/dialog而不是/jcr:root/apps/myProject/pages/myComponent/dialog/jcr:root?因为不是所有对话框都命名为dialog.xml在这种情况下,试试/jcr:root/libs/foundation/components//element(*,cq:dialog),这将返回所有对话框,而不管它们的名称如何。这一点很清楚。但我不能使用/dialog,因为并非所有对话框都命名为dialog。在这种情况下,如何识别dialog.xml?dialog.xml
只是CQ包中的一个文件。此特定名称不会出现在存储库中。您应该使用cq:Dialog
primary类型来列出来自特定位置的对话框,正如rakhi4110在他的评论中所建议的那样。
/jcr:root/apps/myProject/pages//element(*, cq:Dialog)