2009-06-18 19 views
6

Güncel kodu:Groovy Concatenation

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

Column tek bir niteliği ve tek değeri olan bir Node olduğunu. Girişe giriş ifadeleri oluşturmak için bir xml ayrıştırıyorum.

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

Şu anda o diziler ayırmak doğru sırayla içine haşhaş için özellik ve değer saklama ediyorum: Aşağıdaki yapılandırılmış deyimi oluşturmak için bir Groovy yolu var mı.

cevap

18

Şu anda kabul edilen cevaptan çok daha kolay olabileceğini düşünüyorum. Toplama ve birleştirme yöntemleri bu tür şeyler için inşa edilmiştir. Üyelik otomatik

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

Bu mükemmel bir şekilde çalıştı! Kurulumum table.row.column olduğundan, tablename almak için $ {table.attributes() ['name']} kullandım – XanderLynn

0

İki StringBuilder kullanabilirsiniz. kaba ve test edilmedi Böyle bir şey,:

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

Sen Groovy dize manipülasyon operatörleri here her türlü bulabilirsiniz.

+1

Groovy size kod çok daha yapar ziyade '<<' kullanarak bir StringBuilder "(ekleme)" ekleyebileceğiniz ipe sondaki virgül koymak değil, aynı zamanda birleştirme ilgilenir ve okunabilir IMO –