2012-10-08 62 views
10

我見過很多使用Groovy的MarkupBuilder構建XML文檔的例子,但它們似乎都使用文檔中每個元素的靜態屬性(屬性名稱全部爲編譯時間)。如果我試圖構建一個XML文檔,其中的屬性名稱在運行時才知道?我還沒有想出解決這個問題所需的語法。添加動態元素和屬性到常規MarkupBuilder或StreamingMarkupBuilder

+0

你不能只傳遞一個地圖用變量名作爲鍵,即:'node([(key):「value」])' –

+0

是的!我之前試圖做到這一點,但它不適合我(地圖被添加爲一個子元素而不是屬性)。但是,你的迴應促使我確保我沒有做錯,而且我確實是這樣。我對groovy很陌生,最初我將空映射聲明爲列表([] vs [:])。謝謝你的推動,蒂姆! – pneumee

+0

Np :-)我已經完整地寫出了這個問題作爲對這個問題的答案:-)我想檢查它的工作,因爲我認爲第一個 –

回答

5

將屬性名稱作爲鍵的映射應該執行此操作。你需要用括號中的關鍵,這樣的Groovy知道你的意思是使用的a價值,而不是關鍵a

import groovy.xml.MarkupBuilder 

new MarkupBuilder().root { 
    def a = 'dynAttr' 
    node([ (a):'woo' ]) 
} 

會產生:

<root> 
    <node dynAttr='woo' /> 
</root> 
+0

謝謝!只是FYI,在我的解決方案中,我沒有用大括號包圍它,它仍然很棒。 – pneumee

+0

是否可以在循環中完成? – RredCat