簡體   English   中英

Groovy MarkupBuilder

[英]Groovy MarkupBuilder

我有一個東西列表,每個東西都可能是foo或bar。 我想構建一些看起來像這樣的xml:

<rdf:RDF>
  <foo id="1">
  <foo id="2">
  <bar id="3">
</rdf:RDF>

因此,我到此為止:

MarkupBuilder xml = new MarkupBuilder(writer)
  xml.'rdf:RDF' (nsmap) { }

但是現在我被困住了。 我如何-在該xml.'rdf:RDF' (nsmap) { }閉包中-遍歷我的工作清單? 我如何在該迭代器中吐出foo或bar元素(如適用)?

您可能會認為它更簡單。 在xml閉包中包含一個循環,然后在循環中包含標記。 這個腳本...

import groovy.xml.MarkupBuilder

things = ['foo','foo','bar']
writer = new StringWriter()

xml = new MarkupBuilder(writer)
xml.'rdf:RDF' {
    things.eachWithIndex {thing,index ->
        "$thing" id:index+1
    }
}

println writer

...將產生以下輸出:

<rdf:RDF>
  <foo id='1' />
  <foo id='2' />
  <bar id='3' />
</rdf:RDF>

干得好:

import groovy.xml.MarkupBuilder
import org.custommonkey.xmlunit.*

def data = [foo:1,bar:2,baz:3]

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.'rdf:RDF' {
    data.each { e ->
        "$e.key"(id:e.value)
    }
}
println writer

好。

問題是,當閉合由構建器運行時,它在構建器的上下文中運行。 現在,事實證明構建器上下文隱藏方法,但不隱藏變量。 這意味着您可以創建一個閉包,將其分配給變量,然后從構建器中對其進行訪問。

現在,我得到的印象是,這種關閉方式也可以在構建器的上下文中運行。 但我懷疑您可以將“ this”分配給閉包外部的變量,然后訪問該變量以獲取上下文。

您必須去解決這種麻煩,這很荒謬。 我想起了90年代Microsoft Access中的編碼。 效果很好,直到您想要做的事情比嚴格設計的要多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM