Добавление динамических элементов и атрибутов в groovy MarkupBuilder или StreamingMarkupBuilder

Я видел много примеров, используя Groovy MarkupBuilder для создания XML-документа, но все они, похоже, используют статические атрибуты для каждого элемента в документе (имена атрибутов известны во время компиляции). Что делать, если я пытаюсь создать документ XML, где имена атрибутов неизвестны до выполнения? Я еще не понял, что синтаксис требует решения такой проблемы.

Ответ 1

Карта с именами атрибутов в виде ключей должна это сделать. Вам нужно обернуть ключ в фигурные скобки, чтобы Groovy знал, что вы хотите использовать значение a, а не ключ a:

import groovy.xml.MarkupBuilder

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

Генерирует:

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