我有类似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()
答案 0 :(得分:3)
这种方式(一个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>
答案 1 :(得分:0)
我会做像
这样的事情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