2017-02-17 69 views
1

我正在使用Groovy MarkupBuilder創建一些XML。Groovy MarkupBuilder:如何創建標記並追加字符串

在我的方案中,我得到一個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() 

有人能幫助我的位'追加FROM XML字符串HERE元素的,以及如何讓這對我的工作?

感謝

回答

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