2017-01-21 453 views
0

由於包含ID和元素對象的列表,我需要遍歷列表,併產生XML,看起來像這樣:Groovy的嵌套(?遞歸)XML

<object id="1"> 
    <element>...</element> 
    <object id="2"> 
     <element>...</element> 
     <object id="3"> 
      <element>...</element> 
      </object> 
     </object> 
    </object> 

注意創建的每個對象在前一個對象內部,並且對象只在列表的末尾關閉。 (不是我的選擇,由外部接口支配)

有沒有一種方法可以使用XML標記生成器來生成這個?

回答

2
class MyElement { 
    def id 
    def element 
} 

def list = [new MyElement(id: 1, element: "element1"), 
      new MyElement(id: 2, element: "element2"), 
      new MyElement(id: 3, element: "element3")] 

println new groovy.xml.StreamingMarkupBuilder().bind { 
    def foo // note declaration and initialization on different lines 
    foo = { List<MyElement> l -> 
    if (l.isEmpty()) return 
    def head = l.head() 
    def tail = l.tail() 
    object { 
     id head.id 
     element head.element 
     foo(tail) 
    } 
    } 
    foo(list) 
} 

輸出(美化):

<object> 
    <id>1</id> 
    <element>element1</element> 
    <object> 
    <id>2</id> 
    <element>element2</element> 
    <object> 
     <id>3</id> 
     <element>element3</element> 
    </object> 
    </object> 
</object>` 
+0

很大的反響,謝謝! –