2017-02-17 3 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() 

Может кто-нибудь помочь мне с немного «APPEND элементы из XML-STRING ЗДЕСЬ» и как получить, что работа для меня?

благодаря

ответ

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

Смежные вопросы