我们有一些属性不正确的节点,其中 cq:title 不等于 cq:summary(我们希望它们始终相等)。要找到它们,我输入:
SELECT * FROM [nt:base] AS s WHERE s.[cq:title] <> s.[cq:summary]
我得到错误:
expected: static operand
我读到我们无法比较同一节点下的属性。我需要一个解决方法!
我建议编写一个小 servlet,它遍历所有页面并在 JCR 属性级别上进行比较。
使用递归方法这很容易实现,只需从要检查的位置解析根并调用该方法:
private void checkChildren(Page parent) {
Iterator<Page> children = parent.listChildren();
while (children.hasNext()) {
Page child = children.next();
ValueMap props = child.getProperties();
String title = props.get("jcr:title", String.class);
String summary = props.get("jcr:summary", String.class);
if (title != null && summary!=null && !title.equals(summary)) {
//do something with it
}
checkChildren(child);
}
}