在 xml 遍历 groovy 期间调用函数
call function during xml traversal in groovy
我将一个 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 介入并处理调用,但我如何绕过它?
您需要获取id
属性的text()
:
String generateId(String s) {
'generated ' + s
}
xml.root() {
x.y.each {
a(id: generateId(it.@id.text()))
}
}
我将一个 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 介入并处理调用,但我如何绕过它?
您需要获取id
属性的text()
:
String generateId(String s) {
'generated ' + s
}
xml.root() {
x.y.each {
a(id: generateId(it.@id.text()))
}
}