Groovy MarkupBuilder:如何创建标记和追加字符串

时间:2017-02-17 06:15:49

标签: groovy

我正在使用Groovy MarkupBuilder创建一些XML。

在我的场景中,我得到一个xml字符串,它本质上是xml文档的主体,然后我想用其他东西包围它。

像这样......

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()

有人可以帮我解决一下'来自XML STRING HERE的'APPEND ELEMENTS'以及如何为我做这项工作吗?

感谢

1 个答案:

答案 0 :(得分:2)

以下是更改的脚本:

请注意,您已使用某个变量来获取值。为了证明我使用了固定值,您可以在其下方替换它。

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)

您可以在线快速尝试 Demo

<强>输出

enter image description here

相关问题