2013-08-02 9 views
10

Groovy MarkupBuilderを使用してXMLを生成しようとしています。必要GroovyでXML 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") 
    } 
    } 
} 

「アイテム」内に複数の「アイテム」コンテナが存在することがあります。

私の質問は 10個のアイテムを持つOrder XMLを生成したいとしましょう。 "items"コンテナの中にforループのようなものを書く方法がありますか?そうすることで、10種類のアイテムに対してMarkupBuilderコードを記述する必要はありません。

同様の質問Adding dynamic elements and attributes to groovy MarkupBuilder or StreamingMarkupBuilderがあります。しかし、それはループを議論しません。

答えて

16

はいループを使用する方法があります。ここにあなたの例を挙げる:

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 

あなたが期待しているものを教えてください。

+0

です。そこで、マークアップ内に正規のGroovyループ・コードを書くことができます。マークアップにはマークアップコード以外は何も入れないでください。詳細な答えをありがとう。感謝します! :) – CodeVenture

+0

提案していただきありがとうございます。これは私に多くの努力を助けます。 – Tung

+0

偉大な答えをありがとう! Groovyの初心者として、私はこれを見つけるまで多くのことを探しました! – eerriicc

関連する問題