Configuration 如何在Groovy上迭代所有配置项?

Configuration 如何在Groovy上迭代所有配置项?,configuration,groovy,Configuration,Groovy,我有一个groovy scipt,它在我的应用程序中扮演配置角色。其结构如下所示: a{ b=val1 c{ d=val2 } } e{ f=val3 } 如何在此配置中迭代enties以将一个根的设置与另一个根的设置分开?我指的是这样一种迭代方式,我将能够确定根位置,比如: a (root) b c (subroot) d e (root) f 配置级别不受2级限制,所以使用简单的内部“for”循环进行迭代是不合适

我有一个groovy scipt,它在我的应用程序中扮演配置角色。其结构如下所示:

a{
     b=val1
     c{
          d=val2
     }
 }
e{
     f=val3
 }
如何在此配置中迭代enties以将一个根的设置与另一个根的设置分开?我指的是这样一种迭代方式,我将能够确定根位置,比如:

 a (root)
 b
 c (subroot)
 d
 e (root)
 f
配置级别不受2级限制,所以使用简单的内部“for”循环进行迭代是不合适的,因为我不知道编译时会有多少级。

你是说这样

给定一个配置:

def cfg = '''
a {
    b = 'val1'
    c {
        d = 'val2'
    }
}
e {
    f = 'val3'
}'''
您可以像这样定义递归的
walk
方法:

def walk( map, root=true ) {
    map.each { key, value ->
        if( value instanceof Map ) {
            println "$key (${root?'root':'subroot'})"
            walk( value, false )
        }
        else {
            println "$key"
        }
    }
}
然后调用函数,传入slurped配置:

walk( new ConfigSlurper().parse( cfg ) )
这张照片是:

a (root)
b
c (subroot)
d
e (root)
f
您还可以将配置文件保存在一个文件中(在本例中,
config.groovy

然后,您可以将
walk
调用更改为:

walk( new ConfigSlurper().parse( Config ) )

它将输出相同的

I意思是这是文件中的配置内容,所以在ConfigSlupper之后,在这两种情况下(从文件和从字符串)将是相同的对象?如果是这样的话,这似乎是我所需要的。@sphinks在底部添加了一点,解释了当配置在单独的脚本中时的一种方法