Groovy的XMLUtil序列化方法不起作用

时间:2014-08-20 05:16:00

标签: xml grails groovy grails-2.3

我正在使用groovy的XMLSlurper修改一个xml文件,并使用groovy的XMLUtil将其写回来。

def xml = new XmlSlurper(false,false).parseText(new File("pom.xml").text)

// Append new elements or nodes
xml.appendNode {
    pluginRepositories {
        pluginRepository {
            id 'synergian-repo'
            url 'https://raw.github.com/synergian/wagon-git/releases'
        }
    }
}

// Write back to original file.
XmlUtil.serialize(xml, new File("pomm.xml").newPrintWriter("UTF-8"))

当我通过启动grails控制台执行此操作时,此工作正常。但是在grails脚本中使用此代码时会抛出错误。

[Fatal Error] :1:1: Content is not allowed in prolog.
| Error ERROR:  'Content is not allowed in prolog.'
| Error Error executing script ReleasePlugin: groovy.lang.GroovyRuntimeException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
groovy.lang.GroovyRuntimeException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at ReleasePlugin$_run_closure1.doCall(ReleasePlugin:96)

注意:第96行是XMLUtil序列化的行,我正在写xml。

使用grails 2.3.5和jdk 1.7

Modify existing xml file in Groovy

1 个答案:

答案 0 :(得分:0)

由于OP从来都不愿意提供反馈,因此这是基于mvmn注释对我有用的。

解决方案是将groovy.util.slurpersupport.Node封装到groovy.util.slurpersupport.NodeChild的实例中,然后再传递给XmlUtil:

import groovy.util.slurpersupport.Node
import groovy.util.slurpersupport.NodeChild
import groovy.xml.XmlUtil

class GroovyNodeSerializer {
    static String toXML(Node node) {
        return XmlUtil.serialize(new NodeChild(node, null, null))
    }
}