【问题标题】:How to find a node by name in adobe cq5如何在adobe cq5中按名称查找节点
【发布时间】:2014-02-11 21:07:07
【问题描述】:

我正在尝试找出通过名称在存储库中获取节点的最佳方法。我可以确保没有 2 个节点在存储库中具有相同的名称。

我可以编写一个递归代码来按名称获取节点,但是如果我的节点位于根目录 --> 级别 1000 --> 级别 1k

,这会降低系统性能

如果 Adob​​e CQ5(CRX) 提供任何 api 来做同样的事情?

【问题讨论】:

  • 您绝对可以使用查询,根据 Tomek 在下面的回答,但对我来说,如果您需要拉出一个随机节点(更不用说页面),那感觉就像是在做一些奇怪的事情1,000 级深度——你真的不能根据层次缩小搜索范围吗?如果可能的话,您绝对应该致力于适当地构建层次结构。
  • 首先,我真的不明白你在这里维护层次结构是什么意思。尽管我正在创建一个定义明确的节点结构并且需要搜索随机节点,但我认为查询对我有用。 ???
  • 如果你真的无法组织你的内容树来避免它,查询整个数据库将起作用。我的意思是,如果您必须在 repo 的所有部分的每个级别进行搜索,它当然会更慢。

标签: osgi aem jcr osgi-bundle sling


【解决方案1】:

使用 JCR 查询:

String query = "SELECT * FROM [nt:base] AS s WHERE NAME(s) = '%s'";
resourceResolver.findResources(String.format(query, "node-name"), "JCR-SQL2");

【讨论】:

  • 完美运行。太棒了!
  • @Tomek,有什么方法可以通过从那里开始名称的字符串来搜索节点。我想搜索从 KB 开始的给定路径下的所有节点应该是什么查询。我尝试使用 like 和 localname() , % 但它不起作用。示例节点为 KB1234.KBAB56,KBCH578 。我如何从 XPATH 搜索名称从 KB 开始的所有节点。我已使用此查询 SELECT * FROM [nt:unstructured] 作为节点 WHERE ISDESCENDANTNODE ([/etc/commerce/products/flr]) AND NAME(node) = 'KB%'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 2015-06-05
相关资源
最近更新 更多