groovy.xml.Dombuilder删除我的standalone ='yes',这是我需要的

时间:2014-02-04 23:51:34

标签: xml parsing groovy

如这个小片段所示:

import groovy.xml.*


def xml = '''<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
    <Data>
        <![CDATA[ Test 123 ]]>
    </Data>
    '''
def document = DOMBuilder.parse( new StringReader( xml ) )
def root = document.documentElement
def result = XmlUtil.serialize( root )
println document.getXmlStandalone()
println result

结果是真的,但它打印整个东西没有standalone ='yes',我绝对需要进一步处理。我试图将其设置为true,但整个事情似乎没有得到很好的实施......也许有人可以帮助我在这里?

1 个答案:

答案 0 :(得分:0)

我不相信你可以使用XmlUtil,因为它只是写出一个通用声明。

然而,您可以滚动自己的序列化:

import javax.xml.transform.*
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
import groovy.xml.*

def xml = '''<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
            |<Data>
            |    <![CDATA[ Test 123 ]]>
            |</Data>'''.stripMargin()

def document = DOMBuilder.parse( new StringReader( xml ) )

String result = TransformerFactory.newInstance().newTransformer().with {
    setOutputProperty( OutputKeys.INDENT, 'yes' )
    setOutputProperty( OutputKeys.STANDALONE, 'yes' )

    new StreamResult( new StringWriter() ).with { result ->
        DOMSource source = new DOMSource( document )
        transform( source, result )
        result.writer.toString()
    }
}

println result

打印哪些:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Data>
    <![CDATA[ Test 123 ]]>
</Data>