使用String作为使用Groovy XML解析器

问题描述:

代码,我是新来的时髦 - 我希望这是解决一个简单的事情。我读XML文档中,然后我能够访问这样的数据:使用String作为使用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,但我希望一个优雅时髦的解决方案。

+0

[使用\ [\]]在Groovy中访问对象属性的可能的副本(http://stackoverflow.com/questions/4077168/access-object-properties-in-groovy-using) – 2012-07-16 15:11:34

+0

@tim_yates:看起来不一样的东西,我在所有...并在每个迭代上插入到GroovyShell通话将引入不必要的开销。 – 2012-07-16 15:18:08

+0

我看不到答案如何插入到GroovyShell – 2012-07-16 15:19:15

这是非常相似的this question from 3 days agothis question

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

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

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

+0

作品!现在我需要阅读它的工作原理,但非常感谢您的解决方案。 – 2012-07-16 15:23:25