使用String作为Groovy XML Parser的代码

时间:2012-07-16 14:55:58

标签: groovy xml-parsing

我是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中做这些事情,但我希望有一个优雅的常规解决方案。

1 个答案:

答案 0 :(得分:3)

这与this question from 3 days agothis question

非常相似

您基本上需要在.上拆分路径,然后沿着此列表向下移动您的对象图

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

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