AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Wie Node verschieben? Empfehlung für Parser
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Node verschieben? Empfehlung für Parser

Ein Thema von BBoy · begonnen am 5. Aug 2013 · letzter Beitrag vom 5. Aug 2013
Antwort Antwort
Seite 1 von 2  1 2      
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 13:57
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?

Geändert von BBoy ( 5. Aug 2013 um 14:17 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 14:13
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 AddChild(..) nach dort wo du es hinhaben willst und Entfernen aus der Liste in der es nicht mehr sein soll.

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.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 14:17
Bin mit JvSimpleXml immer zufrieden gewesen.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 14:21
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 14:31
Habe das nun so realisiert:
Delphi-Quellcode:
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;
Somit wird Vorname VOR Name gesetzt. Das funktioniert auch so.
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?

Geändert von BBoy ( 5. Aug 2013 um 14:54 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 16:35
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...
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 16:38
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....
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 16:43
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 20:06
Die Reihenfolge ist wichtig, da es sich um eine sortierte Liste handelt die als xml gespeichert/geladen werden soll.
Dafür die Reihenfolge in der Datei zu nutzen ist eine der schlimmsten Unarten, die ich bei XML bisher gesehen habe...

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#10

AW: Wie Node verschieben? Empfehlung für Parser

  Alt 5. Aug 2013, 21:44
Zitat:
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.
Wie das funktionieren soll kann ich mir überhaupt nicht vorstellen.

Zitat:
Dafür die Reihenfolge in der Datei zu nutzen ist eine der schlimmsten Unarten, die ich bei XML bisher gesehen habe...
tja, so sind laien eben Das war das erste wo mir eingefallen ist. Ich speicher die Nodes in der Reihenfolge wie sie später gelesen werden und die für mich wichtig ist. Weiß nicht was daran so abwegig ist. Damit spare ich mir spätere Abfragen und Sortierungen.
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz