for循环在groovy中用于串联的字符串

时间:2016-06-03 18:10:42

标签: groovy groovyshell groovy-console

我有类似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()

2 个答案:

答案 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