2017-01-21 139 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

很大的反响,谢谢! –