我使用jdom2从xml字符串中获取Element列表。 并希望通过getChildText对其进行排序 这是我的比较者
public class ComparatorFunc implements Comparator {
public int compare(Object arg0, Object arg1) {
Element e1 = (Element)arg0;
Element e2 = (Element)arg1;
int flag = e1.getChildText("EntType").compareTo(e2.getChildText("EntType"));
return flag;
}
}
-----这是我的代码:
String xmlStr = request.getParameter("xmlStr");
xmlStr = xmlStr.trim();
//System.out.println(xmlStr);
ByteArrayInputStream xmlStream = null;
try {
xmlStream = new ByteArrayInputStream(xmlStr.getBytes("UTF-8"));
if (xmlStream != null) {
SAXBuilder builder = new SAXBuilder(false);
org.jdom2.Document document = builder.build(xmlStream);
Element root = document.getRootElement();
List < Element > listItem = root.getChildren("item");
ComparatorFunc comparator = new ComparatorFunc();
Collections.sort(listItem, comparator);
.....
但是我收到了这个错误:
org.jdom2.IllegalAddException: The Content already has an existing parent "design"
所以我该怎么办?
答案 0 :(得分:0)
JDOM要求内容始终有效。这包括排序过程中的中间结果。
来自Java的本机排序方法首先通过设置&#39;来交换内容。它在新的地方才能删除&#39;它来自旧地方,创造了一个副本。
这是一个已知问题。
解决方案是使用sort method on the Element做出正确的事情&#39;。
如果需要,还可以使用sortContent()或sortAttributes()。
作为旁注,请考虑以下内容:
org.jdom2.Document document = builder.build(new StringReader(xmlStr));