我是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 for DSL的第153页,其中动态方法可以以类似的方式创建。
思考?理想的解决方案不会添加大量代码,也不会添加任何额外的库依赖项。我总是可以回到使用JDOM在Java中做这些事情,但我希望有一个优雅的常规解决方案。
答案 0 :(得分:3)
这与this question from 3 days ago和this question
非常相似您基本上需要在.
上拆分路径,然后沿着此列表向下移动您的对象图
def val = path.split( /\./ ).inject( root ) { obj, node -> obj?."$node" }?.text()
println "$path\t$val"
在这种情况下应该这样做: - )