这似乎是一个相当简单的问题,但我已经为此绞尽脑汁好几个小时了。我有一个类似于下面的节点结构:
food-group
jcr:content
nuts -> type=almonds
meat -> beef=true
fruit -> type=apples,oranges,bananas
我需要从子节点收集三种类型的属性:一种是字符串、布尔值和字符串数组。我认为下面的sql2查询可以工作并获得它们的属性,但无论出于什么原因,我都会得到一个错误:
查询
SELECT
parent.*
FROM
[cq:PageContent] AS parent
INNER JOIN
[nt:base] as child ON ISCHILDNODE(parent)
WHERE
ISDESCENDANTNODE(parent, [/content/grocerystore/food/])"
错误:
Need to specify the selector name because the query contains more than one selector.
感谢您的帮助,因为我已经在这几天了。
如果对具有多个选择器的QueryResult
调用getNodes()
方法(在您的情况下是parent
和child
),将引发此异常。如果在resourcesolver
上调用findResources()
,也将使用此方法。
改用QueryResult#getRows()
方法:
Session session = resourceResolver.adaptTo(Session.class);
QueryManager queryManager = session.getWorkspace().getQueryManager();
Query query = queryManager.createQuery("...", Query.JCR_SQL2);
QueryResult result = query.execute();
// consider using result.getColumnNames() here
RowIterator rows = result.getRows();
while (rows.hasNext()) {
Row row = rows.nextRow();
// use row.getValue() or row.getValues()
}
几句话:
child
作为第一个参数添加到ISCHILDNODE(parent)
JCR-SQL2查询中有两个地方可以使用ISCHILDNODE
函数:在WHERE
子句和连接条件中。不幸的是,它们采用不同的参数。
您的查询试图在联接条件中使用ISCHILDNODE
,这需要两个参数:子节点的选择器名称和父节点的选择器名称。
以下是我想问的问题:
SELECT parent.*
FROM [cq:PageContent] AS parent
INNER JOIN [nt:base] as child ON ISCHILDNODE(child,parent)
WHERE ISDESCENDANTNODE(parent, [/content/grocerystore/food/])
唯一的变化是ISCHILDNODE
函数的参数。
不幸的是,错误消息并没有真正说明这一点。要理解为什么,了解另一种形式的ISCHILDNODE
会有所帮助——在WHERE
子句中使用。这种形式还需要两个参数:表示子节点的选择器的名称和父节点的文字路径(在该路径下,结果节点是子节点)。下面是一个使用这种形式的人为查询:
SELECT node.*
FROM [nt:base] AS node
WHERE ISCHILDNODE(node,[/content/grocerystore])
查询结果将包含/content/grocerystore
节点的所有子节点。
现在,如果查询只定义了一个选择器(例如,非联接),那么只有一个选择器名称可以传递给ISCHILDNODE
函数。严格来说,选择器是隐式已知的,因此JCR-SQL2允许您只传入路径。下面是一个语义上与前一个人为示例相同的查询:
SELECT node.*
FROM [nt:base] AS node
WHERE ISCHILDNODE([/content/grocerystore])
这是ISCHILDNODE
中唯一采用单个参数的形式,我认为这是我认为CQ5期望的形式:错误表示查询定义了多个选择器,因此必须将选择器作为第一个参数提供。
当然,这是非常误导人的,因为您实际上使用的是联接条件中出现的函数的形式。更好的错误消息是函数需要子选择器名称和父选择器名称。
我有一个SVG文档,其中包含类似于以下内容的节点: 我想做的只是选择
你如何获得子节点内容与JavaScript具体? 我可以通过以下方式获取父节点信息: 花岗岩资源属性 但是我需要访问子节点 -家长 --子对象(命名图像) 有很多方法可以通过Java访问子节点,但我正在构建一个只使用JavaScript的解决方案: 下面是Java示例
你们这些家伙,我有这样一个HTML: 这是将上述所有选项放入列表的代码: 实际上它不起作用。我不知道我错在哪里。请帮帮我。非常感谢。
问题内容: 我正在尝试读取xml文件,例如: 这是我到目前为止的代码: 这是我尝试编写此代码的尝试,怎么说都不成功,这就是我开始赏金的原因。这是http://pastebin.com/huKP4KED。 赏金更新: 我确实真的尝试了好几天,但现在没想到会这么难,我会接受有用的链接/书籍/教程,但更喜欢代码,因为我昨天需要这样做。 这是我需要的: 关于上面的xml: 我需要获取标题ID的值 temp
问题内容: 我想知道,JavaScript提供了多种方法来从任何元素中获取第一个子元素,但是哪种方法最好呢?最好的意思是:在行为方面,大多数跨浏览器兼容,最快,最全面且可预测。我用作别名的方法/属性的列表: 这适用于两种情况: 在表单或迭代的情况下。如果我可能遇到文字元素: 据我所知,使用来自的NodeList ,并使用。我将这一假设基于MDN参考: 是对元素节点的第一个子元素的引用,或者如果不存