我在迭代cq5中的节点时遇到了问题。 在迭代尝试迭代所有子节点的第一级子节点之后,下面是代码。
但是,一旦迭代第一级,所有子节点都不会被迭代。
private void findNodeWithSpace(Node node) {
try {
NodeIterator iterator = node.getNodes();
while (iterator.hasNext()) {
Node childNode = (Node) iterator.nextNode();
if (StringUtils.isNotEmpty(childNode.getName())) {
if (childNode.getName().contains(" ")) {
childNode.getPath()
count++;
LOG.info("**count is**" + count);
}
NodeIterator iterator1 = childNode.getNodes();
if (iterator1 != null) {
findNodeWithSpace(childNode);
}
}
}
} catch (RepositoryException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
代码似乎是正确的。如果没有空节点名称,您是否检查childNodes
是否有节点迭代它们?
其他方式,我不知道CQ5,但由于你向第一个迭代器元素强制转换Node
,你可能还需要将iterator1
的元素转换为Node
,在递归之前。
答案 1 :(得分:0)
请参阅下面的代码:
void yourMethod()
{
Node mainNode = .....; // You somehow get your main node from query or hardcoding the name
//The Recursive Function starts here. variable "count" should be instance here
countNumberNodeWithSpaces(mainNode.getNodes());
}
private void countNumberNodeWithSpaces(NodeIterator nodeItr)
{
while(nodeItr.hasNext())
{
Node node =nodeItr.nextNode();
if(node.getName().contains(" "))
{
count++;
}
countNumberNodeWithSpaces(node.getNodes());
}
}