简体   繁体   中英

Groovy MarkupBuilder : How to create markup and append string

I am using the Groovy MarkupBuilder to create some XML.

In my scenario I get an xml string which is essentially the body of the xml document and then I want to surround it with some other stuff.

Something like this....

def xmltext = '''<node><name short="yes">tim</name><fun>maybe</fun></node>'''
def body = new XmlSlurper(false,false).parseText( xmltext )

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)

xml.mkp.xmlDeclaration version: '1.0', encoding: 'UTF-8'
xml.'cre:InputParamters'('xmlns:cre': 'http://xmlns.oracle.com/apps/ar/soaprovider/plsql/ar_invoice_api_pub/create_single_invoice/') {
    xml.'cre:P_P_TRX_HEADER_TBL' {
        xml.'cre:P_TRX_HEADER_TBL_ITEM' {
            map 'cre:TRX_HEADER_ID', '',xml
            map 'cre:TRX_DATE', requestPayload?.invoiceDate, xml
            map 'cre:TRX_CURRENCY', requestPayload?.currencyCode, xml
            map 'cre:TRX_CLASS', 'INV', xml
            map 'cre:CUST_TRX_TYPE_ID', '1034', xml
            map 'cre:BILL_TO_CUSTOMER_ID', '147055', xml
        }
    }
    <<APPEND ELEMENTS FROM XML STRING HERE>>
}

private map (Object field, Object value, MarkupBuilder xml) {
    if (value) {
        xml."$field"(value)
    }
}

return writer.toString()

Could someone help me with the bit 'APPEND ELEMENTS FROM XML STRING HERE' and how to get that the work for me?

thanks

Here is the changed script:

Note that you have used some variable to get the values. To demonstrate I have used fixed values below which you may be able to replace it.

import groovy.xml.*
def xmltext = '''<node><name short="yes">tim</name><fun>maybe</fun></node>'''

def builder = new StreamingMarkupBuilder()
builder.encoding = 'UTF-8'
def xml = builder.bind {
    mkp.xmlDeclaration()    
    namespaces << [cre:'http://xmlns.oracle.com/apps/ar/soaprovider/plsql/ar_invoice_api_pub/create_single_invoice/']
    cre.InputParamters{
        cre.P_P_TRX_HEADER_TBL {
            cre.P_TRX_HEADER_TBL_ITEM {
                cre.TRX_HEADER_ID ('')
                cre.TRX_DATE ('2017-02-17')
                cre.TRX_CURRENCY( 'USD')
                cre.TRX_CLASS('INV')
                cre.CUST_TRX_TYPE_ID( '1034')
                cre.BILL_TO_CUSTOMER_ID( '147055')
            }
        }
        mkp.yieldUnescaped xmltext
    }
}

println XmlUtil.serialize(xml)

You may try it quickly online Demo

Output

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM