2012-10-08 22 views
10

He visto muchos ejemplos usando Groovy's MarkupBuilder para compilar un documento XML, pero todos parecen usar atributos estáticos para cada elemento del documento (todos los nombres de atributos se conocen en tiempo de compilación). ¿Qué sucede si estoy tratando de construir un documento XML donde los nombres de los atributos no se conocen hasta el tiempo de ejecución? Todavía no he descubierto la sintaxis requerida para resolver un problema como este.Agregar elementos y atributos dinámicos a Groovy MarkupBuilder o StreamingMarkupBuilder

+0

no puedes pasar un mapa con nombres de variables como claves, es decir: 'nodo ([(clave):" valor "])' –

+0

¡Sí! Intentaba hacer eso anteriormente, pero no funcionaba para mí (el mapa se agregaba como un subelemento y no como atributos). Pero su respuesta me impulsó a asegurarme de que no lo estaba haciendo mal y, por supuesto, lo estaba haciendo. Soy bastante nuevo en Groovy, y inicialmente estaba declarando mi mapa vacío como una lista ([] vs [:]). Gracias por el empuje, tim! – pneumee

+0

Np :-) Lo he escrito en su totalidad como respuesta a la pregunta :-) Quería comprobar que funcionó ya que pensé primero –

Respuesta

5

Un mapa con los nombres de atributos como claves debería hacerlo. Es necesario para envolver la llave en los apoyos para que Groovy sabe que significas para utilizar el valor de a en lugar de la tecla a:

import groovy.xml.MarkupBuilder 

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

generaría:

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

gracias! Solo para tu información, en mi solución, no rodeé la llave con llaves y aún funcionó de maravilla. – pneumee

+0

¿Es posible hacerlo en ciclo? – RredCat

Cuestiones relacionadas