ある xml を別の xml に変換すると、入力 xml からノードを処理していたクロージャーから、スクリプト レベルで定義された関数を呼び出すことができません。サンプルコードを見る
def xml = new MarkupBuilder()
def text ='''
<x>
<y id='1'/>
<y id='2'/>
</x>
'''
def x = new XmlSlurper().parseText(text)
String generateId(String s) {
// some code
}
xml.root() {
x.y.each {
a(id: generateId(it.@id))
}
}
出力:
<root>
<generateId>1</generateId>
<a id='generateId' />
<generateId>2</generateId>
<a id='generateId' />
</root>
ご覧のとおり、関数generateId()
は呼び出されませんが、generateId という名前のノードが出力 xml に書き込まれます。
介入して呼び出しを処理するのは MarkupBuilder だと思いますが、どうすればそれを回避できますか?