xml groovy markupbuilder

Agregar múltiples elementos/contenedores XML dinámicamente usando XML MarkupBuilder en Groovy



(1)

Intento generar XML usando Groovy MarkupBuilder.

XML necesario es de esta forma (simplificado):

<Order> <StoreID /> <City /> <Items> <Item> <ItemCode /> <UnitPrice /> <Quantity /> </Item> </Items> </Order>

Los datos se almacenan en un archivo Excel y son de fácil acceso. My Groovy script analiza el Excel y genera el XML.

p.ej

import groovy.xml.* def writer = new StringWriter() def xml = new MarkupBuilder(writer) xml.Order{ StoreID("Store1") City("New York") Items(){ Item(){ ItemCode("LED_TV") UnitPrice("800.00") Quantity("2") } } }

Puede haber múltiples contenedores de "elementos" dentro de "artículos".

Mi pregunta es: supongamos que queremos generar Order XML con 10 elementos. ¿Hay alguna manera de escribir algo así como un bucle for dentro del contenedor de "elementos"? De esta forma, no necesitaremos escribir el código de MarkupBuilder para 10 artículos diferentes.

Existe una pregunta similar al agregar elementos y atributos dinámicos a Groovy MarkupBuilder o StreamingMarkupBuilder . Pero no analiza el bucle.


Sí, hay una forma de usar loop. Extendiendo tu ejemplo aquí:

import groovy.xml.* def writer = new StringWriter() def xml = new MarkupBuilder(writer) //List of items represented as a map def items = [[itemCode: "A", unitPrice: 10, quantity: 2], [itemCode: "B", unitPrice: 20, quantity: 3], [itemCode: "C", unitPrice: 30, quantity: 4], [itemCode: "D", unitPrice: 40, quantity: 6], [itemCode: "E", unitPrice: 50, quantity: 5]] xml.Order{ StoreID("Store1") City("New York") Items{ //Loop through the list. //make sure you are using a variable name instead of using "it" items.each{item-> Item{ ItemCode(item.itemCode) UnitPrice(item.unitPrice) Quantity(item.quantity) } } } } println writer

Debería darte lo que estás esperando.