通过 Groovy XML 解析器使用字符串作为代码

2024-01-25

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


这非常类似于这个问题是3天前的 https://stackoverflow.com/questions/11468189/accessing-a-property-with-object-property and 这个问题 https://stackoverflow.com/questions/11468189/accessing-a-property-with-object-property

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Groovy XML 解析器使用字符串作为代码 的相关文章

随机推荐