Groovy XML динамическое кодирование

Я хочу создать динамический XML-файл, используя входные данные от пользователя (скажем, список счетов). В качестве входных данных скрипт Groovy, взятый в количестве элементов и основанный на пользовательской записи, вводит атрибуты для счета-фактуры. Не могли бы вы привести меня к блоку кода, где я должен применить логику циклического?

Образец:-

Enter the total number of invoices: 
3
Enter the invoice 1 details:
26354
15000
17-12-2017
Harry
Enter the invoice 2 details:
16514
28000
24-09-2017
James

Ожидаемый результат: -

<invoices>
<invoice number='26354'>
<price>15000.0</price>
<date>17-17-2017</date>
<customer>Clinton</customer>
</invoice>
<invoice number='16514'>
<price>28000.0</price>
<date>24-08-2017</date>
<customer>Mark</customer>
</invoice>
</invoices>

1 ответ

Решение
  • Вы можете определить свои данные в виде списка карт.
  • использование StreamingMarkupBuilder создать XML.
  • Вы не упомянули имя корневого элемента, и invoiceRequest используется в качестве образца, чтобы сделать его правильно сформированным xml, при необходимости измените его имя.

Следуйте встроенным комментариям.

Ну вот:

//Define your data as list of maps as shown below
def data = [ 
             [number: 26354, price: 15000, date: '17-12-2017', customer: 'Clinton'],
         [number: 16514, price: 28000, date: '24-08-2017', customer: 'Mark']
           ]

def xml = new groovy.xml.StreamingMarkupBuilder().bind {
    //Change the root element as needed instead of invoiceRequest
    invoiceRequest {
    invoices {
           //Loop thru list and create invoice elements
           data.each { inv ->
              invoice (number: inv.number) {
                 price (inv.price as double)
                 date (inv.date)
                 customer(inv.customer)
              }
           }
        }
    }
}
println groovy.xml.XmlUtil.serialize(xml)

Вы можете попробовать это онлайн демо быстро

Другие вопросы по тегам