使用String作为使用Groovy XML解析器代码(Using a String as code

2019-09-19 14:00发布

我是新来的Groovy - 我希望这是解决一个简单的事情。 我读XML文档中,然后我能够访问这样的数据:

def root = new XmlParser().parseText(xmlString)
println root.foo.bar.text()

我想这样做,是已加载从文件或数据库的路径“foo.bar”部分,这样我可以做这样的事情:

def paths = ["foo.bar","tashiStation.powerConverter"] // defined for this example
paths.each { 
    path ->
    println path + "\t" + root.path.text()
}

显然,作为写不工作的代码......我想,也许这会工作:

paths.each { 
    path ->
    println path + "\t" + root."${path}".text()
}

......但事实并非如此。 我根据我的Groovy的PG的153对,其中动态方法可以以类似的方式来创建DSL初步的解决方案。

思考? 理想的解决方案不会增加显著代码量,并不会增加任何额外库的依赖。 我总能回落到这样的东西在Java中使用JDOM,但我希望一个优雅时髦的解决方案。

Answer 1:

这是非常相似的3天前的这个问题,并且这个问题

你基本上需要分割你的路径上. 然后走这个列表通过你的对象图移动

def val = path.split( /\./ ).inject( root ) { obj, node -> obj?."$node" }?.text()
println "$path\t$val"

应该这样做在这种情况下:-)



文章来源: Using a String as code with Groovy XML Parser