root.getChildren() - Liste sortieren - ClassCastException

Status
Nicht offen für weitere Antworten.

cmkatz

Mitglied
Guten Morgen zusammen,

ich habe bereits die Suche benutzt, aber nichts passendes zu meinem Problem gefunden. :cry:

Zunächst ein paar Daten zur Umgebung: Eclipse 3.1, J2SDK 1.4.2

So, nun mein Problem:
Ich lese eine XML-Datei mit JDOM ein.

Aufbau der XML-Datei:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<record name="angebot" id="32">
    <field name="feld1" type="Long">1</field>
    <field name="feld2" type="Long">1</field>
    <field name="feld3" type="String">Text</field>
    <field name="feld4" type="Long">1</field>
    <field name="feld5" type="String">noch ein Text</field>
    <field name="feld6" type="Date">28.12.2005</field>
    <field name="feld7" type="Long">1</field>
</record>

Das mache ich folgendermaßen:
Code:
...
Document doc1 = getDocument(datei1);
Element root = getRoot(doc1);
List allChildren = root.getChildren();
...

Wenn ich jetzt versuche mit
Code:
Collections.sort(allChildren);
die List zu sortieren, erhalte ich folgende Fehlermeldung:

Code:
java.lang.ClassCastException
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.sort(Unknown Source)
	at java.util.Collections.sort(Unknown Source)

Ich hoffe, ihr könnt mit den Angaben etwas anfangen und mir weiter helfen. :)

Meinen Dank schon mal im Voraus!

Gruß
cmkatz
 

cmkatz

Mitglied
Nochmal ich,

oben beschriebenes Problem habe ich mittlerweile durch Erstellen einer Klasse, die Comparator implementiert, gelöst, soll heißen, der Fehler kommt nicht mehr. Die Klasse sieht so aus:

Code:
public class AngComparator implements Comparator {
	
	public int compare(Object arg0, Object arg1) {
                        return 0;
	}
	
}

Aber sortiert wird nicht richtig. Es soll nach den Values des Attributs "Name" des Elements "field" sortiert werden.

Dann habe ich die Methode compare(Object arg0, Object arg1) folgendermaßen umgeschrieben:
Code:
public int compare(Object arg0, Object arg1) {
		int result = 0;

		Element elm0 = (Element) arg0;
		Element elm1 = (Element) arg1;

		String feld0 = elm0.getAttribute("name").getValue();
		String feld1 = elm1.getAttribute("name").getValue();

		Collator col = Collator.getInstance(new Locale("de", "DE", ""));
		
		if ( col.compare( feld0, feld1 ) < 0 ){
		     result = -1;
		}

		if ( col.compare( feld0, feld1 ) == 0 ){
		     result = 0;
		}
		
		if ( col.compare( feld0, feld1 ) > 0 ){
		     result = 1;
		}

		return result;
	}

Und nun erhalte ich folgende Fehlermeldung:
Code:
org.jdom.IllegalAddException: The element already has an existing parent "record"
	at org.jdom.ContentList.add(ContentList.java:177)
	at org.jdom.ContentList.add(ContentList.java:138)
	at org.jdom.ContentList.set(ContentList.java:679)
	at org.jdom.ContentList$FilterListIterator.set(ContentList.java:1142)
	at java.util.Collections.sort(Unknown Source)

Hm...

Und nu?

Ich steh irgendwie völlig auf dem Schlauch!

Gruß
cmkatz
 

cmkatz

Mitglied
So, auch dieses Problem habe ich nun lösen können:

Die Methode compare sieht jetzt folgendermaßen aus:

Code:
public int compare(Object arg0, Object arg1) {
		int result = 0;
		Element elm0 = (Element) arg0;
		Element elm1 = (Element) arg1;
		String feld0 = elm0.getAttribute("name").getValue();
		String feld1 = elm1.getAttribute("name").getValue();
		
		result = feld0.compareTo(feld1);

		return result;
	}

und die Stelle, an der Sortiert werden soll so:
Code:
    Document doc = getDocument(datei); 
    Element root = getRoot(doc); 
    AngComparator angComp = new AngComparator();
    ArrayList temp = new ArrayList(root.getChildren());
    Collection.sort(temp, angComp);
    root.removeChildren();
    root.setContent(temp);

Dennoch danke fürs Nachdenken! (Manchmal hilft es, wenn man sein Problem aufschreibt und danach eine Rauchen geht! :wink: )

Gruß und guten Rutsch ins Neue Jahr!
cmkatz
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 jaxb XML Mapper - Root Element mit Attribut XML & JSON 20
P Eclipse Rinzo - Schema muss mit DOCTYPE "root" übereinstimmen XML & JSON 0
M <root> node in bestehendes XML-File XML & JSON 8
D Aus lesen einer XML-Datei ( 1 root, 3 childs) XML & JSON 7
N Alle namespaces ins Root Element hinauf ziehen XML & JSON 2
N Alle namespaces ins Root Element hinauf ziehen XML & JSON 2
S Validierung mit JAXB2 ohne root-element XML & JSON 10
S XML Datei einlesen, aber root überspringen XML & JSON 2
R JDOM Root-Element entfernen aber Rest behalten XML & JSON 10
W Element Liste in Root XML & JSON 5
D Text, String vor einem Root Element einfügen XML & JSON 2
W root element parsen,Hilfe! XML & JSON 5
B jdom: getChildren() problem XML & JSON 4
M getChildren gibt nicht alle children zurück XML & JSON 3
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
A GSON - Liste mit Interfaces XML & JSON 4
L JAXB - Generischen Wert mit Liste belegen XML & JSON 1
D XML Liste erstellen XML & JSON 9
G JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? XML & JSON 9
H Liste voller Objekte und Werte in XML via XStream XML & JSON 3
M Liste in Baumstruktur einlesen XML & JSON 4
G Xml Elemente in eine Liste abspeichern! XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben