使用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,但我希望一个优雅时髦的解决方案。
答
这是非常相似的this question from 3 days ago和this question
你基本上需要在.
分割你的路径,然后走这个列表通过你的对象图移动
def val = path.split(/\./).inject(root) { obj, node -> obj?."$node" }?.text()
println "$path\t$val"
应该这样做在这种情况下: - )
+0
作品!现在我需要阅读它的工作原理,但非常感谢您的解决方案。 – 2012-07-16 15:23:25
[使用\ [\]]在Groovy中访问对象属性的可能的副本(http://stackoverflow.com/questions/4077168/access-object-properties-in-groovy-using) – 2012-07-16 15:11:34
@tim_yates:看起来不一样的东西,我在所有...并在每个迭代上插入到GroovyShell通话将引入不必要的开销。 – 2012-07-16 15:18:08
我看不到答案如何插入到GroovyShell – 2012-07-16 15:19:15