Xml 向groovy MarkupBuilder或StreamingMarkupBuilder添加动态元素和属性

Xml 向groovy MarkupBuilder或StreamingMarkupBuilder添加动态元素和属性,xml,groovy,markupbuilder,Xml,Groovy,Markupbuilder,我见过许多使用Groovy的MarkupBuilder构建XML文档的示例,但它们似乎都对文档中的每个元素使用静态属性(属性名称在编译时都是已知的)。如果我试图构造一个直到运行时才知道属性名称的XML文档,该怎么办?我还没有弄明白解决这样的问题所需要的语法。一个以属性名作为键的映射应该可以做到这一点。您需要将键用大括号括起来,以便Groovy知道您要使用a的值,而不是键a: import groovy.xml.MarkupBuilder new MarkupBuilder().root {

我见过许多使用Groovy的
MarkupBuilder
构建XML文档的示例,但它们似乎都对文档中的每个元素使用静态属性(属性名称在编译时都是已知的)。如果我试图构造一个直到运行时才知道属性名称的XML文档,该怎么办?我还没有弄明白解决这样的问题所需要的语法。

一个以属性名作为键的映射应该可以做到这一点。您需要将键用大括号括起来,以便Groovy知道您要使用
a
的值,而不是键
a

import groovy.xml.MarkupBuilder

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

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


您不能只传递一个带有变量名的映射作为键,即:
节点([(键):“值”])
是!我以前尝试过这样做,但它对我不起作用(贴图被添加为子元素,而不是属性)。但是你的回答让我确信我没有做错,而且我确实做错了。我是groovy的新手,最初我将我的空映射声明为一个列表([]vs[:])。谢谢你的帮忙,蒂姆!Np:-)我已经完整地写了这篇文章,作为对这个问题的回答:-)我想检查一下它是否按我想的那样工作谢谢!仅供参考,在我的解决方案中,我没有用大括号将钥匙围起来,它仍然工作得很好。可以循环使用吗?