![]() |
Wie Node verschieben? Empfehlung für Parser
Wie kann ich eine Node verschieben, also sozusagen die Reihenfolge neu anordnen?
Derzeit habe ich mich noch nicht für ein XML Parser entscheiden. Hatte immer NativeXML genutzt aber der funzt mit XE2 nicht mehr. Die neueren Versionen sind scheinbar buggy, jedenfalls funktionieren dann meine alten Projekte nicht mehr. Könnt ihr mir einen guten einfachen Parser empfehlen? Ansprüche habe ich eigentlich keine, wäre schön wenn es eine .move funktion geben würde :) Wenn ich die Daten in ein Grid einlesen möchte, dann muss ich das in einer schleife für jede einzelne node? Und umgekehrt dann genauso, oder gibts da was einfacheres? |
AW: Wie Node verschieben? Empfehlung für Parser
Ich kenne nichts anderes als MSXML, also das, was normal schon unter Xml.XmlIntf und Xml.XmlDoc ist.
Verschieben so als einzelne Methode gibt es meines Wissens nach nicht, aber das ist ja nichts anderes als ein ![]() Ich kenne nichts anderes, bislang aber mit dem Kram sehr gut gefahren :-) Parsen, verändern und wieder schreiben (auch mit Einrückungen für bessere Lesbarkeit) klappt alles fehlerfrei. |
AW: Wie Node verschieben? Empfehlung für Parser
Bin mit JvSimpleXml immer zufrieden gewesen.
|
AW: Wie Node verschieben? Empfehlung für Parser
Ich benutze ganz normal den mit Delphi mitgelieferten... (Unit msxml)
Einziges Problem war, dass auf Embedded Systemen die entsprechende Windowskomponente nicht vorinstalliert ist, aber die gibt es auch separat zum Nachinstallieren. Verschieben eines Knotens (inkl. Unterknoten) geht ganz einfach mit appendChild. |
AW: Wie Node verschieben? Empfehlung für Parser
Habe das nun so realisiert:
Delphi-Quellcode:
Somit wird Vorname VOR Name gesetzt. Das funktioniert auch so.
var
node_old : ixmlnode; node_new : ixmlnode; begin node_old := nodes.Nodes[1]; // Name node_new := nodes.Nodes[2]; // Vorname nodes.Delete(2); nodes.Insert(1,node_new); end; Nun ergibt sich aber noch folgendes Problem. Ich möchte die XML in ein GRID einlesen. Und dort die Datensätze eventuell neu anordnen. Beim speichern soll dann das Grid gelesen werden und die neue anordnung gespeichert werden. Wie kann ich das realisieren? |
AW: Wie Node verschieben? Empfehlung für Parser
Dass jemandem die Reihenfolge der Knoten auf gleicher Ebene wichtig war habe ich ehrlich gesagt noch nie gesehen. Wenn man einen Knoten sucht, dann doch nicht über die Position an welcher er steht, sondern über den Namen.
Ich kenne mich mit den VCL-Komponenten noch nicht so wirklich aus, aber bei vielen kann man an einen Eintrag doch ein Objekt koppeln. Jeder Eintrag in deiner Grid-Komponente wäre doch eine IXMLNode. Dann kannst du doch jede Zeile durchgehen, einem neuen IXMLDocument hinzufügen und das Teil dann am Schluss speichern... |
AW: Wie Node verschieben? Empfehlung für Parser
Die Reihenfolge ist wichtig, da es sich um eine sortierte Liste handelt die als xml gespeichert/geladen werden soll.
Sagen wir einfach es wäre eine ToDo Liste, die wichtigen Dinge oben usw.... |
AW: Wie Node verschieben? Empfehlung für Parser
Naja, wenn es denn eindeutig sortiert ist, hätte ich jedem Eintrag doch explizit auch seine Reihenfolge als Attribut mitgegeben.
Wenn ich persönlich die XML nun bearbeiten würde hätte ich mir keine Gedanken gemacht, die Reihenfolge beizubehalten. |
AW: Wie Node verschieben? Empfehlung für Parser
Zitat:
Die Sortierung ist eigentlich in der Datei doch nicht relevant, sondern nur, wenn du die Daten anzeigst. Und die Anzeige hat mit dem Dateiinhalt direkt ja nichts zu tun. Wenn du die Daten z.B. in einer TVirtualStringTree anzeigst, musst du nur OnCompareNodes implementieren (wo du nur angeben musst wie zwei Knoten zueinander stehen), den Rest macht die alleine. Das geht auch sehr schnell. Auch Attribute wie bereits genannt kann man dafür nehmen, wenn man die Reihenfolge auch in der Datei reflektiert haben möchte. |
AW: Wie Node verschieben? Empfehlung für Parser
Zitat:
Zitat:
Ich könnte auch eine weitere node verwenden mit der Sortierreihenfolge die beim einlesen der Datei berücksichtigt wird. Aber auch da müsste ich beim lesen weitere routinen schreiben die das in die richtige Reihenfolge bringen. Bei meiner Methode spare ich mir das alles. Da es sich dabei um recht kleine Dateien handelt, funktioniert das gut :) Oder gibt es andere Gründe die dagegen sprechen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz