Datenverlust nach sortieren (nur beim serialisieren)

Status
Nicht offen für weitere Antworten.
V

Vatar

Bekanntes Mitglied
Nabend.

Also mein Problem ist folgendes: Ich möchte ein Element zu einem Knoten hinzufügen. Damit es mit der xsd übereinstimmt sollen nach dem Hinzufügen alle Elemente der ersten Ebene alphabetisch sortiert werden damit sie danach serialisiert werden können. Mein Problem besteht nur dann, wenn das neue Element nicht schon einmal vorhanden ist (man kann ja z.B.: mehrere Telefonnummern haben -> dann passt alles)

Ich benutze JDOM :)
Code:
public void addNodeToElement(String id, Element newElement){
		Element parent = getElementByID(id);
		
		if(parent != null){
			int index = getIndexToPaste(parent, newElement);
			
			
		
			
			if(index != 0){
				/* Element an der Stelle einfügen an der schon Elemente mit gleichem Namen vorhanden sind */
				parent.addContent(index, newElement);
			}
			else{
				/* Element an das Ende des parents anfügen, da noch keines vorhanden */
				parent.addContent(newElement);
			}
			
			setModified(true);
			
			List children = parent.getChildren();

			Collections.sort( children, new XML_Element_Comparator() );

			parent.setContent(children);
			
			
		}
}// endmehtod




public void writeDocumentToFile(){
		if( isModified() ){
			XMLOutputter xmlOut = new XMLOutputter();
			try{
				xmlOut.output(document, new FileOutputStream(path));
			}catch(IOException io){
				io.printStackTrace();
			}
			setModified(false);
		}
		else
			System.out.println("[The Document wasn't modified -> Nothing Done]");
}// endmethod



public class XML_Element_Comparator implements Comparator {

	public int compare(Object o1, Object o2) {
		String a = ((Element)o1).getName();
		String b = ((Element)o2).getName();

		System.out.println(a.compareTo(b));
		return a.compareTo(b);
	}

}// end class

Wenn ich nach dem sortieren die neue Liste durchforste sind noch alle Attribute vorhanden. Serialisiere ich das Document, so sind alle Elemente leer.

ich hoffe ihr könnt mir helfen
 
Bleiglanz

Bleiglanz

Gesperrter Benutzer
nimmst du zufällig JDOM? Dann schreib das bitte hin, keiner hat Lust sowas immer zu erraten

meinst du mit "serialisieren" den Aufruf deiner Methode writeDocumentToFile() ? oder was??

Damit es mit der xsd übereinstimmt sollen nach dem Hinzufügen alle Elemente der ersten Ebene alphabetisch sortiert werden damit sie danach serialisiert werden können
Hä? Was? Seit wann kann man in einem Schema eine "alphabetische Reihenfolge" erzwingen? und was zum Teufel soll "serialisiert" bedeuten??

Ich möchte ein Element zu einem Knoten hinzufügen

Wenn ich nach dem sortieren die neue Liste durchforste sind noch alle Attribute vorhanden.

Serialisiere ich das Document, so sind alle Elemente leer.
Na was jetzt: Attribute kaputt oder Elemente kaputt??

Code:
getElementByID(id);
Was ist das? eine member-Methode in deiner Klasse? Erzeugt die vielleicht versehentlich ein NEUES Element, das nicht mit dem document verknüpft ist??

dein Problem ist wahrscheinlich die "Live" Liste, kopier die lieber nach dem sortieren bevor du sie einhängst!!

When all objects in the supplied List are legal and before the new content is added, all objects in the old content will have their parentage set to null (no parent) and the old content list will be cleared.
du fügst möglicherweise ein "leere" Liste mit setContent ein...
this has the effect that any active list (previously obtained with a call to getContent() or getChildren()) will also change to reflect the new content. In addition, all objects in the supplied List will have their parentage set to this element, but the List itself will not be "live" and further removals and additions will have no effect on this elements content. If the user wants to continue working with a "live" list, then a call to setContent should be followed by a call to getContent() or getChildren() to obtain a "live" version of the content.
 
V

Vatar

Bekanntes Mitglied
Ok dann etwas deutlicher.

Ich nutze JDOM

Hä? Was? Seit wann kann man in einem Schema eine "alphabetische Reihenfolge" erzwingen? und was zum Teufel soll "serialisiert" bedeuten??
Die Elemente des XMLs sollen alphabetisch sortiert werden (da es so in der XSD definiert ist). Mit Serialisiert meinte ich SPEICHERN AUF PLATTE

Was ist das? eine member-Methode in deiner Klasse? Erzeugt die vielleicht versehentlich ein NEUES Element, das nicht mit dem document verknüpft ist??
Gibt lediglich das Element zurück, welches die übergebene ID besitzt. mehr nicht.

du fügst möglicherweise ein "leere" Liste mit setContent ein...
Definitiv nicht. Das hab ich schon überprüft. Wenn ich die Liste durchgehe und mir die zugehörigen Attribute und angefügten Elemente ausgeben lasse ist alles vorhanden. Ich kann mir nur vorstellen dass er bei dem setContent nur die erste Ebene anfügt aber die tieferliegenden Elemente auslässt.



Ich hab gestern das erste mal was mit XML gemacht, dass man sich da mal falsch ausdrückt weil man noch nicht alles versteht kann schon mal vorkommen!!! also locker bleiben

trotzdem danke
 
Bleiglanz

Bleiglanz

Gesperrter Benutzer
1. na toll, du hast noch immer dein Problem nicht beschrieben

2. Ist SPEICHERN AUF PLATTE = writeDocumentToFile()

3. Die Elemente des XMLs sollen alphabetisch sortiert werden (da es so in der XSD definiert ist): Heisst das, dass da eine sequence ist, die die erlaubten Elemente alphabetisch aufzählt? Komisch :)

locker bleiben ist gut!

Definitiv nicht. Das hab ich schon überprüft. Wenn ich die Liste durchgehe und mir die zugehörigen Attribute und angefügten Elemente ausgeben lasse ist alles vorhanden. Ich kann mir nur vorstellen dass er bei dem setContent nur die erste Ebene anfügt aber die tieferliegenden Elemente auslässt.
glaub ich nicht, natürlich kriegst du mit getChildren nur die erste Ebene, aber die tieferen sind ja in diesen Kindern mit drin

meine Vermutung

Code:
         List children = parent.getChildren();
         // diese Liste ist LIVE, alles was mit der passiert, passiert
         // direkt mit den Elementen usw.

         /* probier mal  List children = new java.util.ArrayList(parent.getChildren()); an dieser Stelle */

         Collections.sort( children, new XML_Element_Comparator() );
         // möglicherweise schon das sort fatal

         parent.setContent(children); 
         // laut doku: all objects in the old content will have their 
         // parentage set to null (no parent) and the old content list 
         // will be cleared.
         // ABER DIE OLD CONTENT LIST ist ja gerade children???!!!

sort:
This implementation dumps the specified list into an array, sorts the array, and iterates over the list resetting each element from the corresponding position in the array. This avoids the n2 log(n) performance that would result from attempting to sort a linked list in place.
was da wohl mit deiner LIVE liste passiert
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q Konvertierung von json zum Java Objekt nach vorgegebenem Schema XML & JSON 3
R Handler-Wechsel, SAX Parser bricht nach 8192 Byte ab XML & JSON 5
I Newlines nach childs erste ebene (dom) XML & JSON 3
K Docbook tranformieren nach LaTeX XML & JSON 2
sylo Nach Export wird SAXParseException nicht mehr geworfen XML & JSON 4
T XPath Problem: finden einer Node nach Attributswert XML & JSON 2
N xml nach Value durchsuchen XML & JSON 8
W String nach XML nach String verwandeln XML & JSON 4
D XML nach BME Cat Norm prüfen? XML & JSON 4
I Editor, der nur Elemente einfuegt, die nach xsd zulaessig XML & JSON 2
S leading whitespaces nach einem XMLOutputter XML & JSON 9
A Point2D.double nach XML XML & JSON 2
A html-File nach txt-File konvertieren XML & JSON 15
T Newbie Frage. CSS Stylesheet einlesen und suchen nach Tags XML & JSON 6
A Auf der Suche nach Bibliotheken oder wie parsen? XML & JSON 15
M RSS nach WML XML & JSON 9
H Nach einem Attribut suchen und dann löschen XML & JSON 3
M jaxb binding nach set XML & JSON 9
P XML Daten sortieren - Verständnisfrage XML & JSON 4
E xml Element sortieren XML & JSON 2
F Elemente sortieren lassen XML & JSON 2
C root.getChildren() - Liste sortieren - ClassCastException XML & JSON 2
G Sortieren XML & JSON 3

Ähnliche Java Themen


Oben