我有一个小代码片段,它循环遍历一个节点并抓取它的所有属性。 如果我设置一个变量来获取属性值(除了它周围有一个奇怪的[]),我可以让它工作。但我不想要冗余代码,所以我试图在循环中设置多个属性,除了返回的所有属性都是单个值,它不会循环遍历所有节点。
工作
String selectNodeLabel = null
selectNodeLabel = JcrUtils.getChildNodes("links").collect{
it.getProperty("label").getString()
}
单一价值
String selectNodeLabel = null
String selectNodeMeta = null
String selectNodeFooter= null
String topicNode = null
topicNode = JcrUtils.getChildNodes("links").collect{
selectNodeLabel = it.getProperty("label").getString()
selectNodeMeta = it.getProperty("meta").getString()
selectNodeFooter = it.getProperty("footer").getString()
}
感谢您的帮助!
答案 0 :(得分:1)
尝试:
def nodeList = JcrUtils.getChildNodes("links").collect{
[ selectNodeLabel : it.getProperty("label").getString()
selectNodeMeta : it.getProperty("meta").getString()
selectNodeFooter : it.getProperty("footer").getString() ]
}
然后,nodeList
将成为地图列表,您可以这样做:
println nodeList*.selectNodeLabel
例如,打印所有selectNodeLabel
值。
解释代码的问题... Collect会创建闭包返回的元素列表。您的 SINGLE VALUE 代码正在执行的操作是覆盖selectNode...
变量中的值,然后将topicNode
设置为{{1}中每个元素的闭包返回的值}。
对于这种情况,JcrUtils.getChildNodes("links")
将包含topicNode
的列表(因为它是Closure中的最后一行