Cod*_*ure 11 xml groovy markupbuilder
我正在尝试使用Groovy MarkupBuilder生成XML.
所需的XML是这种形式(简化):
<Order>
<StoreID />
<City />
<Items>
<Item>
<ItemCode />
<UnitPrice />
<Quantity />
</Item>
</Items>
</Order>
Run Code Online (Sandbox Code Playgroud)
数据存储在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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
"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
Run Code Online (Sandbox Code Playgroud)
应该给你你期待的.
| 归档时间: |
|
| 查看次数: |
8517 次 |
| 最近记录: |