【问题标题】:Groovy XmlSlurper Reference New NodeGroovy XmlSlurper 参考新节点
【发布时间】:2014-09-22 17:18:00
【问题描述】:

我有一些要使用 XmlSlurper 解析的 xml,我想添加一个新节点,然后引用该新节点。这证明了我正在尝试做的事情。除了 1. 添加节点 2. 序列化 3. 再次解析 4. 引用新节点之外的任何解决方案?

import groovy.xml.XmlUtil
def xml = new XmlSlurper().parseText("<foo/>") 
xml.appendNode({bar()});
//now try to append something to bar.  Probably doesn't work because it's a closure
xml.bar.appendNode({baz()})
//no baz inside bar
println XmlUtil.serialize(xml)

谢谢。

编辑:

您必须使用 XMLParser 才能使其工作:

import groovy.xml.XmlUtil

//slurper - does NOT work
def xml = new XmlSlurper().parseText("<foo/>") 
xml.appendNode({bar()});
//now try to append something to bar
xml.bar.appendNode({baz()})
//no baz inside bar
println XmlUtil.serialize(xml)

//parser - works

xml = new XmlParser().parseText("<foo/>") 
xml.appendNode('bar');
//now try to append something to bar
xml.bar.first().appendNode('baz')
//no baz inside bar
println XmlUtil.serialize(xml)

这个帖子的答案解释了为什么:

Groovy XmlSlurper vs XmlParser

【问题讨论】:

    标签: groovy xml-parsing


    【解决方案1】:

    如下使用有什么问题?

    import groovy.xml.XmlUtil
    
    def xml = new XmlSlurper().parseText( "<foo/>" ) 
    
    xml.appendNode { 
        bar { 
            baz()
        } 
    }
    
    println XmlUtil.serialize( xml )
    

    【讨论】:

    • 你是对的,但是我正在动态构建 xml。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2011-11-25
    相关资源
    最近更新 更多