GroovyでKey、ValueをXMLにクールに出力する-keyValueXml.groovy-

Groovy初心者がネスト構造KeyValueをXMLで出力する方法の質問するところから始まったGroovyでの実装方法。 Javaとほぼ同じように書けるGroovyがJavaらしさを脱ぎ捨てて「Groovyらしいとは何か」「Groovyのもつ表現力の可能性」について洗練されていく様を見れる。 JavaからGroovyへ移行する簡単なステップ http://d.hatena.ne.jp/fumokmm/20110212/1297522544 続きを読む
5
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

groovyでパラメータでわたってきたkey,valueをそのままxmlのタグ名とバリューにしたいときってどうやるのがいいんだろう。DOMを使うのがいいのかな? #groovy

2011-03-15 01:23:50
Yasuharu Nakano @nobeans

@kyon_mm MarkupBuilderが簡単なのでは。

2011-03-15 01:25:03
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@nobeans まだそこまで調べていないんですけど、MarkupBuilderで変数名をそのままタグ名とかに使えるのでしょうか?hoge(key, value){//MarkupBuilderの処理}でkey(value)みたいな。今ひとつわかっていないです。

2011-03-15 01:27:37
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@nobeans なるほど!!!すっかりGStringのことを忘れていました!そっかぁ。GStringの機能を考えるとかなり自由に使えるんですね。。。

2011-03-15 01:33:46
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

GStringはだいたい正規表現書きやすいくらいにしか思っていませんでした。ごめんなさい。"$hoge"とかかなり便利なんですよね>< #groovy

2011-03-15 01:35:39
ふも @fumokmm

展開演算子じゃないですか?もしくは#collect RT @kyon_mm: groovyでパラメータでわたってきたkey,valueをそのままxmlのタグ名とバリューにしたいときってどうやるのがいいんだろう。DOMを使うのがいいのかな? #groovy

2011-03-15 07:20:29
ふも @fumokmm

@kyon_mm サンプルコードをgistあたりに上げてもらえると助かります!

2011-03-15 18:36:56
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@fumokmm はい!帰宅したらあげるので、あげたらリプ飛ばします!

2011-03-15 18:38:32
ふも @fumokmm

@kyon_mm よろしくお願いします!

2011-03-15 18:42:37
ふも @fumokmm

@kyon_mm なるほど、key,valueを[key:value]使ってないんですね、あと再起的になってるのでcollectAllとかを使えばいけそうですがいまちょろっとやったらいけなかったのでw あとでじっくり見ます。

2011-03-15 22:01:48
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@fumokmm おおう!!!ありがとうございます>< [key:value]はHashMapだから順序が無視されるので適当なクラスのリストにしてみました。何が一般的かよくわかってないですorz

2011-03-15 22:07:44
ふも @fumokmm

@kyon_mm [key:value]はHashMapじゃなくてLinkedHashMapなので順序は実は保持されてます(キリッ)

2011-03-15 22:09:12
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@fumokmm !???orz  勉強しなおします><。 ありがとうございます!

2011-03-15 22:11:29
close_yutori @kimukou2628

@kyon_mm このコードってGroovy限定で良いんだっけ? まず突っ込むところとしては、list と expect はdef定義した方が良いよ<GroovyLintで文法エラーになる

2011-03-15 22:13:13
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@kimukou_26 ですです。あ、defすっかり忘れてました>< もともとclassだったものをScriptに落としたので。。。orz

2011-03-15 22:15:10
close_yutori @kimukou2628

@kyon_mm あと違和感があったのが 「"${it.key}"(it.value)」=>「"${it.key}(${it.value})"」の方が良いかも。あとこういうのって NodeBuilder で書くのが普通のような どうなんでしょう? @fumokmm さん?

2011-03-15 22:41:50
ふも @fumokmm

@kimukou_26 @kyon_mm 簡単にいけると思ったんですがなかなかいけないみたい。たぶん再起的に繰り返すeachAllみたいなクロージャメソッドをListに追加して、構築時に使うといいかも。むしろこれ、Jsonじゃだめなんでしたっけ?(笑)

2011-03-15 22:55:29
ふも @fumokmm

RT @kimukou_26: @kyon_mm 「"${it.key}"(it.value)」はMarkupBuilder用なんですよね?

2011-03-15 22:58:35
close_yutori @kimukou2628

@fumokmm コード読んでてListを使わなければいけない必要性が分からない<苦笑。かえってコードが難しくなっている気がしますよ~ @kyon_mm くん! RT 「"${it.key}"(it.value)」はMarkupBuilder用なんですよね?

2011-03-15 23:03:53
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@fumokmm @kimukou_26 JSONを実際に触ったことがないのであれですが、今回の要件としてはXMLで返してほしいってことだったので、とりあえずMarkupBuilderでやってみました。この再帰のところが面倒だったので僕も最初はDOMとかNODEかなぁとw

2011-03-15 23:16:29
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@kimukou_26 @fumokmm Listにしている理由はデータベースから取得する項目を使うのでそこで順にならんでいる方がいいってことで取得したデータを定義順にならべた上でXMLにする必要があったからです。Listである必要はないのですが順序が重要です。

2011-03-15 23:18:22
1 ・・ 12 次へ