1

我有类似字符串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,如下所示。我相信我正在以更努力的方式尝试它。有没有使用 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()
4

2 回答 2

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>
于 2016-06-03T18:34:08.077 回答
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

于 2016-06-03T18:23:38.417 回答