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)
Вы можете попробовать это онлайн демо быстро