2009-06-18 14 views
6

वर्तमान कोड:ग्रूवी स्ट्रिंग कड़ी

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

Column एक Node एक भी विशेषता है और एक ही मूल्य होता है। मैं इनपुट में सम्मिलित कथन बनाने के लिए इनपुट करने के लिए एक एक्सएमएल पार्स कर रहा हूं।

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

मैं वर्तमान में विशेषता और मूल्य सरणियों अलग करने के लिए फिर उन्हें सही क्रम में पॉपिंग भंडारण कर रहा हूँ: वहाँ एक ग्रूवी तरह से निम्न संरचित बयान बनाने के लिए है।

उत्तर

18

मुझे लगता है कि वर्तमान में स्वीकृत उत्तर की तुलना में यह ग्रोवी में बहुत आसान हो सकता है। संग्रह और जुड़ने के तरीकों को इस तरह की चीज के लिए बनाया गया है। शामिल हों स्वचालित रूप से स्ट्रिंग पर अनुगामी अल्पविराम डाल नहीं है संयोजन का ख्याल रखता है और यह भी

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

यह पूरी तरह से काम किया! क्योंकि मेरा सेटअप table.row.column था, मैंने tablename को पुनर्प्राप्त करने के लिए $ {table.attributes() ['name']} का उपयोग किया – XanderLynn

0

आप केवल दो स्ट्रिंगबिल्डर का उपयोग कर सकते हैं। कुछ इस तरह है, जो किसी न किसी और untested है:

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

आप ग्रूवी स्ट्रिंग परिवर्तन ऑपरेटरों here के सभी प्रकार के मिल सकता है।

+1

ग्रूवी में आप ") संलग्न (" एक StringBuilder का उपयोग कर '<<' के बजाय जो कोड एक बहुत अधिक बनाता है को संलग्न कर सकते हैं पठनीय आईएमओ –

संबंधित मुद्दे