Seite 1 von 1

XML Nodes sortierung

Verfasst: 11. November 2008 17:41
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

Verfasst: 11. November 2008 17:55
von Christian81
Ich würde sagen - Sinn von XML nicht verstanden. :)

Verfasst: 11. November 2008 19:57
von ToBs
Vielleicht verrätst Du mir, warum ich denn Sinn von XML nicht verstanden habe!

Währe nett…

Viele Grüße

Verfasst: 11. November 2008 20:38
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.

Verfasst: 12. November 2008 09:08
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 ...

Verfasst: 12. November 2008 09:43
von Christian81
Danke RHBaum - ich habs nicht so mit ausführlichen Erklärungen :)

Verfasst: 12. November 2008 10:05
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/

Verfasst: 12. November 2008 10:39
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 ...