2009-06-18 16 views
6

código actual:maravilloso Concatenación

row.column.each(){column -> 
    println column.attributes()['name'] 
    println column.value() 
} 

Column es una Node que tiene un solo atributo y un valor único. Estoy analizando un xml para ingresar crear declaraciones de inserción en el acceso. ¿Hay una manera maravillosa para crear la siguiente declaración estructurada:

Insert INTO tablename (col1, col2, col3) VALUES (1,2,3) 

Estoy almacenando el atributo y valor para separar las matrices luego hacerlas estallar en el orden correcto.

Respuesta

18

Creo que puede ser mucho más fácil en groovy que la respuesta actualmente aceptada. Los métodos de recopilación y unión están diseñados para este tipo de cosas. Únase se encarga automáticamente de la concatenación y también no poner la coma al final de la cadena

def names = row.column.collect { it.attributes()['name'] }.join(",") 
def values = row.column.collect { it.values() }.join(",") 
def result = "INSERT INTO tablename($names) VALUES($values)" 
+1

¡Esto funcionó perfectamente! Como mi configuración era table.row.column, utilicé $ {table.attributes() ['name']} para recuperar el nombre de tabla – XanderLynn

0

Puede utilizar dos StringBuilders. Algo como esto, que es áspera y no probado:

def columns = new StringBuilder("Insert INTO tablename(") 
def values = new StringBuilder("VALUES (") 
row.column.each() { column -> 
    columns.append(column.attributes()['name']) 
    columns.append(", ") 
    values.append(column.value()) 
    values.append(", ") 
} 
// chop off the trailing commas, add the closing parens 
columns = columns.substring(0, columns.length() - 2) 
columns.append(") ") 
values = values.substring(0, values.length() - 2) 
values.append(")") 

columns.append(values) 
def result = columns.toString() 

Usted puede encontrar todo tipo de maravillosos operadores de manipulación de cadenas here.

+1

En Groovy puede añadir a un StringBuilder usando '<<' en lugar de "append()" que hace el código mucho más OMI legible –