3

我是 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 的 pg 153,其中可以以类似的方式创建动态方法。

想法?理想的解决方案不会添加大量代码,也不会添加任何额外的库依赖项。我总是可以回退到用 JDOM 在 Java 中做这些事情,但我希望有一个优雅的 groovy 解决方案。

4

1 回答 1

3

这与3 天前的这个问题和这个问题非常相似

你基本上需要分割你的路径.,然后沿着这个列表遍历你的对象图

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

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

于 2012-07-16T15:15:36.950 回答