-1

我有一个小代码片段,它循环一个节点并获取它的所有属性。如果我设置一个变量来获取属性值,我可以让它工作(除了它有一个奇怪的 [] 围绕它)。但我不想要冗余代码,所以我试图在循环内设置多个属性,除了所有返回的都是一个值,它不是围绕所有节点循环。

在职的

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()
}

谢谢你的帮助!

4

1 回答 1

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为从闭包中返回的每个元素的值JcrUtils.getChildNodes("links")

对于这种情况,topicNode将包含一个列表it.getProperty("footer").getString()(因为它是闭包中的最后一行

于 2013-06-18T21:00:14.790 回答