CQ5 XPath查询中的列说明符

时间:2015-08-07 14:36:21

标签: xpath cq5 aem

我正在尝试获取CQ 5.4中的页面列表,在特定日期之后修改以及修改页面时的信息以及由谁

我已经创建了一个XPath查询来查找在特定日期之后修改的所有页面:

/jcr:root/path/to/portal//element(*, cq:Page)[
(@jcr:content/cq:lastModified >= xs:dateTime('YYYY-MM-DDT00:00:00.000+02:00'))
] order by jcr:content/@cq:lastModified descending

在CRXDE中运行它只给出了以下页面列表:

/path/to/portal/page1
/path/to/portal/page4
/path/to/portal/page2

我还需要显示cq:lastModified,cq:lastModifiedBy的值。最好显示为:

/path/to/portal/page1 | user1 | YYYY-MM-DDT00:00:00.000+02:00
/path/to/portal/page4 | user1 | YYYY-MM-DDT00:00:00.000+02:00
/path/to/portal/page2 | user2 | YYYY-MM-DDT00:00:00.000+02:00

我尝试过列说明符,如:

/jcr:root/path/to/portal//element(*, cq:Page)/(@cq:lastModifiedBy | @cq:lastModified)[
(@jcr:content/cq:lastModified >= xs:dateTime('YYYY-MM-DDT00:00:00.000+02:00'))
] order by jcr:content/@cq:lastModified descending

但它什么也没给我。

有没有办法在CQ中运行此查询以获得我需要的结果?

1 个答案:

答案 0 :(得分:0)

您尚未显示用于访问QueryResult的任何代码。

理论上,QueryResult.getRows().nextRow().getValues()会以与Value[]相同的顺序返回QueryResult.getColumnNames()

实际上,查询会返回资源或节点的迭代器 - 您可以将这些迭代器调整为ValueMap以获取单个属性。我在http://itgumby.github.io/blog/2014/10/cq-queries-demystified/上写了一篇关于不同类型查询的博客文章,其中显示了用于访问查询结果的JSP代码示例。

如果使用像groovy这样的语言,可以将结果操作简化为:

String query = "/jcr:root/path/to/portal//element(*, cq:Page)/(@cq:lastModifiedBy | @cq:lastModified)[(@jcr:content/cq:lastModified >= xs:dateTime('YYYY-MM-DDT00:00:00.000+02:00'))] order by jcr:content/@cq:lastModified descending"
Collection<Resource> results = resourceResolver.findResources(query, Query.XPATH).collect { it as Resource }
results.each { rsc ->
    def props = rsc.adapTo(ValueMap)
    String path = rsc.path
    String user = props.get('jcr:content/cq:lastModifiedBy', '')
    String lastMod = props.get('jcr:content/cq:lastModified', '')
    // do what you need with path/user/lastMod
}

此外,如果您从cq:Page更改为cq:PageContent,则可以从后续访问中删除jcr:content/