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の153ページに基づいて、最初のソリューションを作成しました。

考え?理想的なソリューションは、大量のコードを追加せず、追加のライブラリ依存関係を追加しません。私はいつでも JDOM を使用して Java でこのようなことを行うことに頼ることができますが、洗練されたグルーヴィーなソリューションを望んでいました。

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 に答える