for loop in groovy for string with concatenation
for loop in groovy for string with concatenation
我有像 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 for 循环,如下所示。我相信我正在以更难的方式尝试它。有什么简单的方法可以使用 Groovy 生成 XML 以上的内容吗?
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()
我会做类似
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
这种方式(一个 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>
我有像 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 for 循环,如下所示。我相信我正在以更难的方式尝试它。有什么简单的方法可以使用 Groovy 生成 XML 以上的内容吗?
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()
我会做类似
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
这种方式(一个 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>