我正在尝试对groovy中的xml文件进行排序,但是当查看结果时,它的排序却不符合我的预期(按字母顺序排序)。
这是代码
import groovy.json.JsonSlurper;
import groovy.json.JsonBuilder;
import groovy.util.OrderBy;
import groovy.xml.XmlUtil;
String xmlString = "<root>";
xmlString = xmlString + "<record><item>CBCP3030cmackham************00000036</item><field>CBCP</field></record>";
xmlString = xmlString + "<record><item>CBCP3030cmackham************00000036</item><field>CBCP</field></record>";
xmlString = xmlString + "<record><item>CASHser@mdgrathnicol.co*302000000143</item><field>CASH</field></record>";
xmlString = xmlString + "<record><item>CASH2001724*************302000000143</item><field>CASH</field></record>";
xmlString = xmlString + "</root>";
def rootsFTPData = new XmlParser().parseText(xmlString);
rootsFTPData.children().sort(true) {
[it.item.text()]
};
def xmlStringTemp = XmlUtil.serialize(rootsFTPData);
println xmlStringTemp;
这是输出
<?xml version="1.0" encoding="UTF-8"?><root>
<record>
<item>CASH2001724*************302000000143</item>
<field>CASH</field>
</record>
<record>
<item>CBCP3030cmackham************00000036</item>
<field>CBCP</field>
</record>
<record>
<item>CBCP3030cmackham************00000036</item>
<field>CBCP</field>
</record>
<record>
<item>CASHser@mdgrathnicol.co*302000000143</item>
<field>CASH</field>
</record>
</root>
我会期望的
CASH2001724*************302000000143
CASHser@mdgrathnicol.co*302000000143
CBCP3030cmackham************00000036
CBCP3030cmackham************00000036
我的代码有什么问题,或者如何实现正确的排序。
答案 0 :(得分:0)
您将返回一个包含单个项目的数组,其中包含文本。
仅返回文本:
rootsFTPData.children().sort(true) { it.item.text() }
您现在正在做的是这个
rootsFTPData.children().sort(true) { [it.item.text()] }
这会将文本放入数组中(该数组包含一个元素,即文本),因此Groovy会对它进行排序,但是对数组进行排序。您想对文本进行排序,所以返回文本。不是数组。
不相关,但是不需要像Groovy中那样进行字符串连接:
import groovy.xml.XmlUtil
String xmlString = """
<root>
<record><item>CBCP3030cmackham************00000036</item><field>CBCP</field></record>
<record><item>CBCP3030cmackham************00000036</item><field>CBCP</field></record>
<record><item>CASHser@mdgrathnicol.co*302000000143</item><field>CASH</field></record>
<record><item>CASH2001724*************302000000143</item><field>CASH</field></record>
</root>
"""
def rootsFTPData = new XmlParser().parseText(xmlString)
rootsFTPData.children().sort(true) { it.item.text() }
def xmlStringTemp = XmlUtil.serialize(rootsFTPData)
print xmlStringTemp
这将产生:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<record>
<item>CASH2001724*************302000000143</item>
<field>CASH</field>
</record>
<record>
<item>CASHser@mdgrathnicol.co*302000000143</item>
<field>CASH</field>
</record>
<record>
<item>CBCP3030cmackham************00000036</item>
<field>CBCP</field>
</record>
<record>
<item>CBCP3030cmackham************00000036</item>
<field>CBCP</field>
</record>
</root>