尝试序列化GPathResult时,Groovy XmlUtil.serialze()抛出'prolog中不允许内容'错误

str*_*ohs 5 xml groovy

我在Groovy的(1.7.3)XmlUtil.serialize(GPathResult)方法中遇到了一个奇怪的问题.当我用GPathResult调用它时,它会抛出"prolog中不允许内容"错误,但是groovy.util.Node正好序列化.这是我正在尝试的非常简单的Groovy脚本:

import groovy.xml.XmlUtil
import groovy.xml.StreamingMarkupBuilder

def xmlStr = """<?xml version="1.0" encoding="UTF-8"?><stuff>ver="1.0"><properties><foo>bar</foo></properties></stuff>"""

//to pretty print GPathResult -- NOT WORKING
def gpr = new XmlSlurper().parseText( xmlStr )
println XmlUtil.serialize( gpr )

println 'trying groovy.util.Node'
//to pretty print groovy.util.Node -- WORKS
def node = new XmlParser().parseText( xmlStr )
println( XmlUtil.serialize( node ) )  
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

[Fatal Error] :1:1: Content is not allowed in prolog.
ERROR:  'Content is not allowed in prolog.'
<?xml version="1.0" encoding="UTF-8"?>
trying groovy.util.Node
<?xml version="1.0" encoding="UTF-8"?>
<stuff ver="1.0">
 <properties>
  <foo>bar</foo>
 </properties>
</stuff>
Run Code Online (Sandbox Code Playgroud)

我在Mac OS X Snow Leopard上使用Groovy版本:1.7.3 JVM:1.6.0_20

还有其他人遇到过这种情况吗?

tim*_*tes 4

看起来像一个错误,Groovy 选择了错误的serialize方法来执行XmlUtil

如果我们硬铸它,它似乎对我有用(对你有用吗?)

println XmlUtil.serialize( (groovy.util.slurpersupport.GPathResult)gpr )
Run Code Online (Sandbox Code Playgroud)

我已将其添加到 JIRA 中: http: //jira.codehaus.org/browse/GROOVY-4285 所以希望它会在未来的版本中得到修复,并且您不需要演员阵容

[编辑] JIRA 现在声明修复已进入主干,并将在 1.7.4+ 中普遍可用