「XML 文書を入力としてこのビルダーでツリー構造を構築させる方法」を Closure 使って実装する件(→)、冷静に考えれば案外簡単に出来ました。
def xml2builder = new XmlToBuilderReloaded() xml2builder.parseText(xml) class XmlToBuilderReloaded{ final builder = new MarkupBuilder() def parseText(String xmlText){ def parser = new XmlParser() def xml = parser.parseText(xmlText) buildNode(xml) } def buildNode(node){ def secondArg = (node.text()) ? node.text() : createContentClosure(node) builder.invokeMethod(node.name(), [node.attributes(), secondArg]) } def createContentClosure(node){ return { for(child in node.children()){ buildNode(child) } } } }
ビルダーの invokeMethod() メソッドに渡している secondArg オブジェクトは「テキスト」もしくは「複数の子要素」のどちらかにしています(前回の実装もそうしてました)。
ビルダーに対して invokeMethod() メソッドを呼び出せば良いようですね。 後はビルダーで構築するときにやることを再帰的に行えば良いだけ。 できてみれば何てことなかったですねぇ。
- 作者: Dierk Konig,Andrew Glover,Paul King,Guillaume Laforge,Jon Skeet,杉浦孝,櫻井正樹,須江信洋,関谷和愛,佐野徹郎,寺沢尚史
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/09/27
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 146回
- この商品を含むブログ (121件) を見る