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 のネイティブ ソート メソッドは、コンテンツを古い場所から「削除」する前に新しい場所に「設定」してコンテンツを交換し、複製を作成します。

これは既知の問題です。

解決策は、 「正しい」ことを行う Element で sort メソッドを使用することです。

必要に応じて、sortContent() または sortAttributes() も使用できます。

補足として、入力については次の点を考慮してください。

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