1

ある 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 だと思いますが、どうすればそれを回避できますか?

4

1 に答える 1