【问题标题】:call function during xml traversal in groovy在groovy中的xml遍历期间调用函数
【发布时间】:2016-01-11 12:03:45
【问题描述】:

我将一个 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 介入并处理调用,但我怎样才能绕过它?

【问题讨论】:

    标签: xml groovy markupbuilder


    【解决方案1】:

    需要获取id属性的text()

    String generateId(String s) {
        'generated ' + s
    }
    
    xml.root() {
        x.y.each {
            a(id: generateId(it.@id.text()))
        }
    }
    

    【讨论】:

    • 这行得通,谢谢。我没有注意到它的类型。@id 不是 String 而是 groovy.util.slurpersupport.Attributes。
    猜你喜欢
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多