XML Nodes sortierung

Alles rund um die Programmierung mit Qt
Antworten
ToBs
Beiträge: 3
Registriert: 14. Juni 2008 02:44

XML Nodes sortierung

Beitrag von ToBs »

Hallo zusammen,

ich habe ein kleines Problem bzw. eigentlich ist es keines.

Ich habe ein XML Datei bei der folgende Struktur besteht:

<NodeList>
<Node pos=0 ...../>
<Node pos=1 ...../>
<Node pos=2 ...../>
<Node pos=3 ...../>
.....
</NodeList>

Ich lese ein XML Dokument mit der obigen Struktur ein.
Leider gibt es momentan keine Möglichkeit ein QDomDocument in irgendeiner Form zu sortieren.
Denn das Ziel ist es, die Konten in der <NodeList> nach der pos Nummer zu sortieren.

Man muss dazu sagen im Moment habe ich das Glück, dass die Nodes in der richtigen Reihenfolge eingelesen werden bzw. ich sie auch wenn ich darauf zugreife in der richtigen Reihenfolge bekomme.

Allerdings möchte ich mich nicht darauf verlassen, dass dieses Phänomen immer zutrifft!

Kennt jemand eine Möglichkeit so was relativ schnell (Performanz) zu sortieren? Oder eventuell gibt es eine andere bessere Möglichkeit auf die XML Dateien zuzugreifen?

Über einen kleinen Tipp würde ich mich sehr freuen!

Viele Grüße
ToBs
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich würde sagen - Sinn von XML nicht verstanden. :)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ToBs
Beiträge: 3
Registriert: 14. Juni 2008 02:44

Beitrag von ToBs »

Vielleicht verrätst Du mir, warum ich denn Sinn von XML nicht verstanden habe!

Währe nett…

Viele Grüße
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

XML definiert/garantiert in keinster Weise irgendwelche Reihenfolgen. So wie das Aussehen der xml-Datei nicht definiert ist.
Musst Dich also selbst drum kümmern das nach dem Einlesen sortiert wird.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Christian81 will Dir in seiner charmanten Art nur klarmachen, das DOM structuren nicht dafuer gedacht sind. :twisted:

Eigentlich sollte man seinem Programm die Domstructuren nur nutzen, um daten einzulesen und auszugeben (in XML Dateien natuerlich).
Logische operationen etc sollte man lassen.

Aber was nuetzen einen Daten, wenn man nix machen kann damit ? richtig, du sollst sie einfach vorher in eigene Datenstructuren überfuehren, welche fuer deine Aufgaben viel besser optimiert sein koennen.

zum beispiel:
XML kann intern nur strings. waehrend du positionen selbst sortieren willst. die positionen sind integers. Nicht nur das die sortierung mit den Strings als Positionen krankhaft inperformant waere, sondern sie waer auch noch falsch ! oder wuerdest du erwarten, das "Pos=2" nach "Pos=11" in Deiner Folge kommt ???

Du muesstest den Domnodes nu ploetzlich ne fuelle an an informationen mit geben, damit die dinger gescheit sortieren koennten, und dafuer sinds einfach ned gedacht.

Der richtige weg waere also:

Domstructur erzeugen durch einlesen deines XML ...
durch die Dom Nodes iterieren
die daten dabei auslesen
und in deine eigenen strukturen packen,
dabei die Daten schon in die richtigen Datentypen convertieren (String -> integer z.b.)
Sortierung kann schon bei einfuegen in die eigene structur passieren, wenn man container verwendet die selbststaendig sortieren (set map)
ansonsten danach gleich sortieren
Domstructur gleich wieder wegwerfen (sie hat ihre pflicht getan).

Ciao ...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Danke RHBaum - ich habs nicht so mit ausführlichen Erklärungen :)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Sortierung hat ein sinn bei der ausgabe der daten oder wenn man daraus einen neues xml file konvertiert in QXmlQuery query(QXmlQuery::XSLT20);


xsl:sort

http://de.selfhtml.org/xml/darstellung/ ... e.htm#sort

mittlerweile kann QT4.5 auch xslt sprechen und ausgeben...

http://doc.trolltech.com/main-snapshot/qxmlquery.html

ein beispiel: http://fop-miniscribus.googlecode.com/s ... c/Xsltqt5/
.........................
speack português italiano deutsch english castellà qt
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Dann sollt er auch XMLQuery verwenden und nicht DOM :-)

Klar macht es an gewissen stellen sinn, die Daten zu sortieren. Z.B wenn man die "transformiert". Deshalb kann man bei transformationen auch sortieren.

Ich glaub aber eher das sein problem ein prinzipielles ist ... Er arbeit direkt auf den DOM Structuren. Und das ist eigentlich unhandlich und inperformant.

selbst wenn er zum sortieren XMLQuery nimmt, glaub ich das er mit eigenen Datenstrukturen und sortieren einfach schneller ist.

XMLQuery wuerde aber wiederum sinn machen, wenn der diese "Abfragen" auch unabhaengig von seinem eigenen Programm noch woanders braucht. Und in den Queries ne Menge logik stecken wuerde ....
Trotzdem wuerde ich auch in diesem fall die Ergebnisse nehmen und schleunigst in mein eigenes Datenformat wandeln ... es sei denn, ich will mit denen gar nix mehr logisches machen sondern nur noch anzeigen, dann kann mans auch in der Stringform lassen. Warum man dann aber nen eigenes Programm braucht und ned nen browserelement nimmt, staende dann immer noch zur diskussion ^^

Ciao ...
Antworten