1

我想在 CQ 5.6 (AEM) 实例中包含的 JCR 存储库中搜索.jsp包含给定字符串的所有文件xxx。作为 JCR 对 XPath(或 JCR-SQL2)的解释的新手,我在表达查询方面不太成功。

这将为我提供所有.jsp文件:

//*[jcr:contains(., '.jsp')]

这就是我希望限制上面.jsp包含的文件列表的方式xxx

//*[jcr:contains(., '.jsp')][jcr:contains(jcr:content/@jcr:data, 'xxx')]
//*[jcr:contains(., '.jsp') and jcr:contains(jcr:content/@jcr:data, 'xxx')]
//*[jcr:contains(., '.jsp')]/jcr:content[jcr:contains(@jcr:data, 'xxx')]/..

@jcr:data属于类型Binary。以上似乎都不起作用。我哪里错了?

4

1 回答 1

4

看起来查询应该在 nt:file 节点上,而不是在 jcr:data 节点上。请参阅此对 JCR-Jackrabbit-Xpath 表达式的答案,以获取节点内包含的文件的搜索内容文本

使用 querybuilder 的快速测试显示了来自 CQ 中 JSP 文件的结果(在此示例中,它们包含“/foundation/global.jsp”):

http://localhost:4502/bin/querybuilder.json?type=nt:file&nodename=*.jsp&group.1_fulltext=foundation/global.jsp

给出:

{
  success: true,
  results: 10,
  total: 21,
  offset: 0,
  hits: [
    {
      path: "/libs/cq/personalization/components/offerpage/body.jsp",
      excerpt: " --%&gt;&lt;%@include file=&quot;/libs/<strong>foundation/global.jsp</strong>&quot;%&gt;&lt;% I18n i18n = new I18n(slingRequest); String icnCls = ...",
      name: "body.jsp",
      title: "body.jsp",
      lastModified: "2013-04-24 11:45:05",
      created: "2013-04-24 11:32:58",
      size: "3 KB",
      mimeType: "text/plain"
    },
...
}
于 2013-04-24T13:10:49.483 回答