うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

KeyValueXml-Key,ValueをXMLに出力する-

KeyValueXMLとは

次の僕のツイートがキッカケとなって様々な方に実装を提案してもらったちょっとしたプログラミングの問題です。

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

この一連の中でid:fumokmmさんがKeyValueXML.groovyとツイートされていたので、この問題のことを僕が勝手にKeyValueXMLと名付けました。

KeyValueXMLの問題を具体的に書くと

[
    "key1": "value1",
    "key2": "value2",
    "key3": [
        "key3-1": "value3-1",
        "key3-2": "value3-2",
    ]
]

のようにKey,ValueのValueの中に再帰的にKey,Valueの構造が入っているデータに対して

 <key1>value1</key1>
  <key2>value2</key2>
  <key3>
    <key3-1>value3-1</key3-1>
    <key3-2>value3-2</key3-2>
  </key3>

のようにKeyをタグ名、Valueを値としたXML形式に変換する。というものです。
Key,Valueは独自のクラスでもMapでもいいですが、順序を保ったまま出力することが要件になります。

KeyValueXMLのまとめ

KeyValueXMLは本人の予想に反して多くのGroovyエキスパートの方達に実装していただけました。
その一連をTogetterにまとめています。
Togetter:GroovyでKey、ValueをXMLにクールに出力する-keyValueXml.groovy- - Togetterまとめ


一番最初にブログにしていただいたid:fumokmmさんのエントリー
GroovyのMarkupBuilderで再起的な構造のXMLを生成する - No Programming, No Life


Togetterの中でも出てきていますが、C#(LINQ)版、Scala版と実装してくださった方達もいらっしゃいました。


C#
C# で Key、Value な コレクションを XML にしてみた - お だ のスペース


http://twitter.com/#!/neuecc/status/49007610317389825

http://bit.ly/dFMPoP 匿名型toXml(ダサい) @kyon_mm


Scala

http://twitter.com/#!/fumokmm/status/49052756715114496

よし!できた! コードが泥臭いのはScalaに慣れてないからってことで勘弁して下さい。 https://gist.github.com/877373 http://bit.ly/eeZ0cO #hatena819


Scalaで再帰的な構造のXMLを生成する - North Ground



みなさん本当にありがとうございます!
こんなに多くの方に書いてもらえるとは思いませんでした。
またこの一連のおかげで様々な勉強に結びつきました。


ということで、id:kyon_mmはKeyValueXMLの各言語実装版を非常に心待ちにしております。
ご自分が使える言語でぜひ実装してみてください。そしてもしよろしければTwitterで@kyon_mmまでご一報ください。ヨダレ垂れ流して喜びます。
ブログがある方はブログに書くのもいいと思いますし、gistやideoneのようなWEBサイトを使うのもいいと思います。


Enjoy Our Coding!!