Для петли в Groovy для строки с конкатенацией
У меня есть строка как Color=Blue|Size=M|Style=simpleStyle
и его нужно преобразовать, как показано ниже, используя groovy.
<Item>
<comp>
<name>Color</name>
<value>Blue</value>
</comp>
<comp>
<name>Size</name>
<value>M</value>
</comp>
<comp>
<name>Style</name>
<value>simpleStyle</value>
</comp>
</Item>
Я написал Groovy для цикла что-то вроде ниже. Я верю, что пытаюсь сделать это немного сложнее. Есть ли какой-нибудь простой способ создать XML выше, используя Groovy?
for (int i = 0; StrRelationshipDetails.toString().contains('|'); i++) {
println StrRelationshipDetails.toString()
def StrPair = new StringBuilder(StrRelationshipDetails.substring(0, StrRelationshipDetails.indexOf('|')))
def StrName = new StringBuilder(StrPair.substring(0, StrPair.indexOf('=')))
def StrValue = new StringBuilder(StrPair.substring(StrPair.indexOf('=')+1, StrPair.size()))
StrRelationshipDetails = StrRelationshipDetails.substring(StrRelationshipDetails.indexOf('|')+1, StrRelationshipDetails.size())
}
println StrRelationshipDetails.toString()
2 ответа
Решение
Этот способ (Groovy) должен работать без использования for
цикл:
String provided = "Color=Blue|Size=M|Style=simpleStyle"
def builder = new groovy.xml.MarkupBuilder()
builder.Item {
provided.tokenize('|')*.tokenize('=').each { element ->
comp {
name element[0]
value element[1]
}
}
}
return
результаты в
<Item>
<comp>
<name>Color</name>
<value>Blue</value>
</comp>
<comp>
<name>Size</name>
<value>M</value>
</comp>
<comp>
<name>Style</name>
<value>simpleStyle</value>
</comp>
</Item>
Я бы сделал что-то вроде
def result = "<Item>"
def values = StrRelationshipDetails.toString().tokenize("|")
for(def kv of values) {
result +="<comp>"
def pair = kv.tokenize("=")
def name = pair[0]
def value= pair[1]
result += "<name>$name</name>"
result += "<value>$value</value>"
result +="</comp>"
}
result +="</Item>"
Тогда я бы использовал XMLSlurper, чтобы превратить его в документ XML.
Что-то, что мне нужно отметить. Приведенный выше код очень нагляден, чтобы сделать вещи более понятными. Это может быть намного короче (особенно с Groovy). Вы также можете определить def
переменные как String