LabVIEWForum.de - Struktur einer Labview-XML Datei zur Laufzeit bestimmen

LabVIEWForum.de

Normale Version: Struktur einer Labview-XML Datei zur Laufzeit bestimmen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
hallo zusammen,
ich speichere zu Dokumentationszwecken ein paar Daten in eine *.Xml-Datei mittel der Standard-Labview-Routinen. Es stellte sich allerdings heraus, dass der Datentyp der *xml-Datei mit der Zeit angepasst (erweitert) werden muss. Man berücksichtigt halt nie alles im Vorfeld.
Jetzt das Problem: Wenn ich eine ältere XML-Version mit der Routine die für die neuere Version geschrieben wurde zu öffnen, bekomme ich eine Fehlermeldung, da die XML-Typen nicht übereinstimmen. Is ja logisch. (Hab ich das jetzt verständlich erklärt?)
Und die Frage: Ist es irgendwie möglich, die Typstruktur der jeweiligen XML-Datei zur Laufzeit zu bestimmen? Dann könnte ich über eine Case-Struktur die unterschiedlichen Datentyp-Versionen auswählen und über die entsprechend passende Routine die Datei trotzdem einlesen.
Bin wie immer dankbar für jede Hilfe.

Gruß
Karl
2 Ideen:

1) Bei Fehler per XML-Lesen-VI einfach die nächste Struktur ausprobieren.
2) File vorher als ASCII-File einlesen und nach entsprechenden Tags durchsuchen.

Gruß, Jens
Hi Jens,
ich glaub die Idee mit dem ASCII-File und den Tags gefällt mir. Dann müsst ich nur noch einen Versionseintrag in jede XML-Datei schreiben und danach die Struktur auswählen. Ja, so mach ich's. Dank Dir!

Gruß
Karl
Hallo zusammen,
jetzt muss ich leider das Thema doch noch mal aufkochen.
Das XML file als ASCII einlesen und dann nach einer Art Versionsnummer suchen klappt hervorragend, allerdings tritt nun folgendes Problem auf:
Ich packe die XML-Einträge in einen Cluster, den ich über als "strict type def." erstellt habe, um Änderungen der Clusterstruktur global im Programm abzufangen. Die Daten des Clusters werden im ganzen Programm benötigt. Wenn ich jetzt unterschiedliche XML-Versionen einlesen möchte brauch ich auch die entsprechenden Clusterstrukturen. Und das überall im Programm.
Wenn man die Struktur einer "strict type def." zur Laufzeit ändern könnte, wäre der obige Ansatz klasse, so aber wird der Programmcode vollkommen konfus.
Hat jemand noch eine Idee wie man so eine Abfangroutine für unterschiedliche XML-Dateiversionen designen kann?
Dankbar für jede Hilfe.

Gruß
Karl
Hallo Karl,

deine XML-Leseroutine muss nur Daten mit dem TypeDef-Cluster nach außen hin bereitstellen. Intern kannst du aber mit beliebigen Clustern arbeiten (für jede XML-Version einen anderen)! Du musst dann nur die Werte vom gelesenen XML-Cluster in den typdefinierten Cluster umkopieren, d.h. die jeweils passenden Einträge bereitstellen.

P.S.: Eine einfache Typedefinition hätte vielleicht auch ausgereicht. Mit "strict" legst du aber auch das komplette Aussehen des Clusters fest, was manchmal gewünscht sein kann, aber an anderer Stelle Einschränkungen bewirkt...
Referenz-URLs