Elemente sortieren lassen

Status
Nicht offen für weitere Antworten.

Flokati

Mitglied
Hi!

Ich habe folgende XML-Datei("NewFile.xml"):
Code:
<?xml version="1.0" encoding="UTF-8"?>
<root>
	<child>
		<id>1</id>
		<data>
			<data1>11</data1>
			<data2>12</data2>
			<data3>13</data3>
		</data>
	</child> 	
	<child>
		<id>3</id>
		<data>
			<data1>31</data1>
			<data2>32</data2>
			<data3>33</data3>
		</data>
	</child> 
	<child>
		<id>2</id>
		<data>
			<data1>21</data1>
			<data2>22</data2>
			<data3>23</data3>
		</data>
	</child> 
</root>

Die Datei möchte ich nun so sortieren, das die child-Elemente in Reihenfolge ihrer id-Werte stehen.
Mein Programm:
Code:
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class XMLMain {

	/**
	 * @author Ingo
	 * @param no args
	 */
	public static void main(String[] args) {
		Document doc = null;
		try {
			SAXBuilder builder = new SAXBuilder();
			doc = builder.build(new File("NewFile.xml"));
//			printDocument(doc);
			Element root = doc.getRootElement();						
			List<Element> children = root.getChildren("child");
			
			Collections.sort(children,  new  MyComparator());  
			root.setContent(children);
			printDocument(doc);
		} catch (IOException e) {
			// z. B. Dateifehler
			e.printStackTrace();
		} catch (JDOMException e) {
			// z. B. ungültiges XML-Dokument
			e.printStackTrace();
		}

	}
	
    public static void printDocument(Document doc) throws IOException {
    	Format format = Format.getPrettyFormat(); 
        XMLOutputter fmt = new XMLOutputter(format);
        fmt.output(doc, System.out);
    }    
}

//this class is used for the sorting of the elements
class MyComparator implements Comparator<Element> {
  public int compare(Element o1, Element o2) {
	  int id1 = Integer.parseInt(o1.getChild("id").getText());
	  int id2 = Integer.parseInt(o2.getChild("id").getText());
	  
	  return id1 - id2;	 
  }
}

Wenn ich mein Programm starte, erhalte ich folgende Fehlermeldung:
Exception in thread "main" org.jdom.IllegalAddException: The Content already has an existing parent "root"
at org.jdom.ContentList.add(ContentList.java:218)
at org.jdom.ContentList.add(ContentList.java:140)
at org.jdom.ContentList.set(ContentList.java:497)
at org.jdom.ContentList$FilterListIterator.set(ContentList.java:961)
at java.util.Collections.sort(Unknown Source)
at xml.XMLMain.main(XMLMain.java:29)


PS: In Zeile 27 erhalte ich eine "Type safety"-Warning. Kann die 'beseitigt' werden? (abgesehen von "@SuppressWarnings("unchecked")")
 

kleiner_held

Top Contributor
Die Liste die Du durch root.getChildren("child"); bekommst kann nicht sortiert werden, Du musst wohl oder uebel den langen Weg nehmen:
1. Alle Elemente mit root.getChildren("child"); geben lassen und diese in eine neue ArrayList schaufeln
2. Alle Elemente vom root entfernen
3. ArrayList sortieren
4. Die Elemente aus der ArrayList in der richtigen Reihenfolge dem root wieder hinzufuegen
 

Flokati

Mitglied
Ja, so gehts! :D

Ich habe den Code wie folgt erweitert, und das gewünschte Ergebnis erhalten, besten Dank!

Code:
			Element root = doc.getRootElement();									
			List<Element> children = root.getChildren("child");
			// Liste der Elemente kopieren
			List<Element> childList = new ArrayList<Element>();
			for(Element e:children) 
				childList.add((Element)e.clone());																
			// Elemente sortieren
			Collections.sort(childList,  new  MyComparator());			 
			// Die sortierten Elemente in das Dokument einfügen
			root.setContent(childList);
			printDocument(doc);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L XML einlesen gleichnamige Elemente XML & JSON 5
J Parent- und Child-Elemente mit gleiche Namen, geht das ? XML & JSON 1
S XML - Bestehende Elemente ändern XML & JSON 1
C JAXB: XML-Elemente einlesen und als XML-Attribute ausgeben XML & JSON 7
R Verschachtelung gleichnamiger Elemente XML & JSON 7
D optionale Elemente mit defaultwerten werden in xml miterzeugt XML & JSON 2
A Elemente aus mehreren XML-Dateien zu einem zusammenfügen XML & JSON 5
G JAXB und verschachtelte Elemente? XML & JSON 6
J Anzahl der Elemente in einem XML-Dokument auslesen XML & JSON 7
F Hilfe beim bearbeiten von XML elemente XML & JSON 3
G Wieviele Elemente von TagName, ich brings nicht hin XML & JSON 5
G Leere Elemente verhindern XML & JSON 7
aze JaxB Elemente in LinkedHashSet werden nicht wiededergegeben XML & JSON 3
E XML Datei einlesen und Elemente in der Console ausgeben XML & JSON 6
D Tabs/Einrückungen der XML-Elemente gehen beim Schreiben verloren XML & JSON 5
Z XML auslesen, Elemente daraus entfernen und als neue XML zurückgeben XML & JSON 2
S JTree - Nur Elemente mit Attributen einfügen XML & JSON 2
T Elemente zählen mit JDOM in XML XML & JSON 7
G XML Parser Fehler, zwei gleiche kind-Elemente XML & JSON 7
I Editor, der nur Elemente einfuegt, die nach xsd zulaessig XML & JSON 2
G xml einlesen und bestimmte Elemente an eine gui_Klasse überg XML & JSON 25
H Elemente eines Node auslesen XML & JSON 2
M XML Elemente mit JDOM durch Text ersetzen XML & JSON 2
P JDom nimmt keine Elemente an. XML & JSON 3
M Elemente mit Prefix via JDOM erstellen XML & JSON 6
J Jdom Elemente lesen XML & JSON 5
P zugriff auf gewuenschte elemente klapp nicht. XML & JSON 3
T Einfach nur die Elemente einer XML Datei auslesen :( XML & JSON 10
T Elemente aus XML-File löschen (JDom) XML & JSON 9
G Xml Elemente in eine Liste abspeichern! XML & JSON 2
G Elemente in XML XML & JSON 4
G brauche Tips, wie ich am besten auf Elemente zugreife XML & JSON 5
D Xml-Datei in JTree anzeigen und Elemente ausblenden XML & JSON 2
S JDOM Elemente suchen XML & JSON 2
P XML Daten sortieren - Verständnisfrage XML & JSON 4
E xml Element sortieren XML & JSON 2
C root.getChildren() - Liste sortieren - ClassCastException XML & JSON 2
G Sortieren XML & JSON 3
V Datenverlust nach sortieren (nur beim serialisieren) XML & JSON 4
S DTD und XML lassen sich nicht verknüpfen XML & JSON 2
Y Welchen XML Parser / Klassen aus XSD generieren lassen XML & JSON 4

Ähnliche Java Themen

Neue Themen


Oben