我开始使用Groovy(2.4.12),该引擎将具有与Java 1.8.0_271相同的版本,并且我试图从XMLSlurper的结果中查找唯一值,因此尝试推送到Set。但是我得到了完整的列表,而不是唯一的值。
这是代码段代码:
import com.sap.gateway.ip.core.customdev.util.Message
import groovy.xml.MarkupBuilder
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.text.DecimalFormat
import java.util.HashSet
def Message processData(Message message) {
Reader reader = message.getBody(Reader)
def DELVRY07 = new XmlSlurper().parse(reader)
Set mySet = DELVRY07.IDOC.E1EDL20.E1EDL24.VGBEL.toSet();
//println mySet.size()
mySet.each { order ->
println order
}
return message;
}
输入XML
<?xml version="1.0"?>
<DELVRY07>
<IDOC BEGIN="1">
<E1EDL20 SEGMENT="1">
<E1EDL24 SEGMENT="1">
<POSNR>000010</POSNR>
<VGBEL>0010001035</VGBEL>
</E1EDL24>
<E1EDL24 SEGMENT="1">
<POSNR>000020</POSNR>
<VGBEL>0010001036</VGBEL>
</E1EDL24>
<E1EDL24 SEGMENT="1">
<POSNR>900001</POSNR>
<VGBEL>0010001035</VGBEL>
</E1EDL24>
<E1EDL24 SEGMENT="1">
<POSNR>900002</POSNR>
<VGBEL>0010001035</VGBEL>
</E1EDL24>
<E1EDL24 SEGMENT="1">
<POSNR>900003</POSNR>
<VGBEL>0010001036</VGBEL>
</E1EDL24>
<E1EDL24 SEGMENT="1">
<POSNR>900004</POSNR>
<VGBEL>0010001036</VGBEL>
</E1EDL24>
<E1EDL24 SEGMENT="1">
<POSNR>900005</POSNR>
<VGBEL>0010001036</VGBEL>
</E1EDL24>
</E1EDL20>
</IDOC>
</DELVRY07>
输出量
0010001035
0010001036
0010001036
0010001036
0010001035
0010001035
0010001036
只有两个唯一值,因此预期结果仅为0010001035和0010001036。
我将不胜感激任何意见或建议。谢谢,
里克
这里的工作示例。
考虑下面的代码(修改后为re:)Message
:
def Message processData(Message message) {
def reader = message.getBody()
def DELVRY07 = new XmlSlurper().parse(reader)
// crucial code:
def mySet = DELVRY07.IDOC.E1EDL20.E1EDL24.VGBEL.inject(new HashSet(),{
acc, node -> acc << node.text()
})
mySet.each { order ->
println order
}
return message;
}
原始代码的问题在于,返回的GPath表达式NodeChildren
将作为字符串值打印到控制台,但这是它自己的对象,因此使用text()
很重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句