1

我使用 jdom2 从 xml 字符串中获取元素列表。并希望通过 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"

那我该怎么办?

4

1 回答 1

0

JDOM 要求内容始终有效。这包括排序过程中的中间结果。

Java 的本机排序方法通过首先将内容“设置”到新位置,然后从旧位置“删除”它来交换内容,从而创建一个副本。

这是一个已知问题。

解决方案是在“正确”做事的元素上使用排序方法。

如果需要,您还可以 sortContent() 或 sortAttributes()。

作为旁注,请考虑以下输入:

org.jdom2.Document document = builder.build(new StringReader(xmlStr));
于 2014-06-12T10:43:52.593 回答