Cod*_*ure 11 xml groovy markupbuilder
我正在尝试使用Groovy MarkupBuilder生成XML.
所需的XML是这种形式(简化):
<Order>
  <StoreID />
  <City />
  <Items>
    <Item>
      <ItemCode />
      <UnitPrice />
      <Quantity />
    </Item>
  </Items>
</Order>
数据存储在Excel文件中,易于访问.我的Groovy脚本解析Excel并生成XML.
例如
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")
    }
  }
}
"items"中可以有多个"item"容器.
我的问题是:假设我们要生成包含10个项目的Order XML.有没有办法在"items"容器中写一个类似for循环的东西?这样,我们就不需要为10个不同的项目编写MarkupBuilder代码.
有一个类似的问题将动态元素和属性添加到groovy MarkupBuilder或StreamingMarkupBuilder.但它没有讨论循环.
dma*_*tro 21
是的,有一种使用循环的方法.在此处扩展您的示例:
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
应该给你你期待的.