2009-06-18 5 views
6

Code actuel:Groovy Concaténation

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

Column est un Node qui a un seul attribut et une valeur unique. Je suis en train d'analyser un xml pour entrer créer des instructions d'insertion en accès. Est-il un moyen Groovy pour créer l'instruction structurée suivante:

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

je stocke actuellement l'attribut et de valeur pour séparer des réseaux puis les sauter dans le bon ordre.

Répondre

18

Je pense que cela peut être beaucoup plus facile dans groovy que la réponse actuellement acceptée. Les méthodes de collecte et de jointure sont construites pour ce genre de chose. Joignez-vous automatiquement prend soin de concaténation et aussi ne met pas la virgule de fin sur la chaîne

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

Cela a fonctionné parfaitement! Parce que mon installation était table.row.column, j'ai utilisé $ {table.attributes() ['nom']} pour récupérer le nom de table – XanderLynn

0

Vous pouvez simplement utiliser deux StringBuilders. Quelque chose comme ça, qui est rude et non testé:

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() 

Vous pouvez trouver toutes sortes d'opérateurs de manipulation de chaînes Groovy here.

+1

En Groovy, vous pouvez ajouter à un StringBuilder en utilisant « << » plutôt que « append() » qui rend le code beaucoup plus lisibles IMO –