1

我将一个 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

1

您需要获取属性text()的:id

String generateId(String s) {
    'generated ' + s
}

xml.root() {
    x.y.each {
        a(id: generateId(it.@id.text()))
    }
}
于 2016-01-11T12:09:36.597 回答