首页 > 解决方案 > Groovy 拆分结果

问题描述

脚本:

import com.sap.gateway.ip.core.customdev.util.Message;
    import java.util.HashMap;
    import groovy.xml.XmlUtil;
    import groovy.xml.StreamingMarkupBuilder;
    import groovy.xml.*;
    
    def Message processData(Message message) {
    
         // get body
        def body = message.getBody(java.io.Reader);
        
        // parse xml body
        def result = new XmlSlurper().parse(body);
    
        def message1 = result.Message1;
        def message2 = result.Message2;
    
    def one = message1.EmployeeDataReplicationConfirmation.EmployeeDataReplicationConfirmation.collect { it.personId.text() }
    def two = message2.queryCompoundEmployeeResponse.CompoundEmployee.collect { it.person.person_id.text() }
    def intersect = one.intersect(two)
    def userid1 = ((one - intersect) + (two - intersect))
    println((one - intersect) + (two - intersect))
    return message;


     

输出:

Console Output
Running...
[6107, 10140, 11774]

在 text 1 和 text2 字段中是不同的 id。此命令将为我提供两者相同的 ID。但他像这样给我:[6107, 10140, 11774] 但我需要它在 XML 中.. 就像.. 我需要这个

<Person>
    <User>
    <userid>6107</userid>
    </User>
    <User>
    <userid>10140</userid>
    </User>
    <User>
    <userid>11774</userid>
    </User>

我该怎么做 ?谢谢 :)

标签: groovy

解决方案


您可以使用MarkupBuilder该类来创建您的 XML,假设您已经准备好数据,那么您唯一需要做的就是:

import groovy.xml.MarkupBuilder

def userIds = [6107, 10140, 11774]

def xml = new StringWriter()
def builder = new MarkupBuilder(xml)

builder.people() {
   userIds.each { id ->
     user() {
      userId(id)
     }
  }
}

println xml

这将是输出

<people>
  <user>
    <userId>6107</userId>
  </user>
  <user>
    <userId>10140</userId>
  </user>
  <user>
    <userId>11774</userId>
  </user>
</people>

有关使用 XML 的更多示例,您可以查看我的 gist Working with xml


推荐阅读