我正在使用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
答案 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))
}
}