Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Jetz möchte ich eine Info ändern, zB ein neues Gehalt bei einer Person. Mir ist unklar wie ich an einen Knoten herankomme, den es in einer Suche mehrmals gibt (<Alter>, <Beruf> .. usw).
Wenn du eine andere Hochsprache (zB C#) beherrschst, dann würde ich den XML-Parser immer damit schreiben...
Hab vor Jahren mal einen XML-Parser in LabVIEW mit ActiveX XML DOM Objekten geschrieben. Das war ein sehr aufgeblähter und unübersichtlicher Code (trotz StateMachine etc, zugegebenermassen war die XML-Struktur ein wenig aufwendiger).
Lösung mit zB C#:
Ein XML-Schema-Definition erstellen (sofern du das noch nicht hast) mit XSD.exe dir eine C#-Klasse erstellen und diese Klasse mit deinem Code erweitern (in einer partial class, aber das versteht sich ja von selbst )...). Und diese Assembly dann in LabVIEW laden und verwenden (nicht vergessen die Referenz wieder zu schliessen!)
Es geht natürlich auch mit LabVIEW und ActiveX XML DOM Objekten. Du musst halt deinen Tree jedes mal neu durchsuchen. Vom Root ausgehend suchst du die Person der Wahl und dort selektierst du das Element Gehalt und kannst dann den Wert ändern.
Wenn du dich mit XML auseinandersetzten möchtest, dann kann ich die Seiter hier empfehlen: w3schools-XML
Gruess,
\c
In theory, there is no difference between theory and practice; In practice, there is.
Hehe :-)
Leider bin ich hier beim Erarbeiten einer Lösung darauf angewiesen LV zu nutzen... also bin ich nich bei "Wünsch dir was!" sondern bei "So isses!"
Fas is nen riesiges Projekt und die Xml nur eine gabz kleine Geschichte. Es muss sein
Das Erstellen mit ActiveX hab ich hinbekommen. Aber das Ändern is übel... eben genau weil einige Knoten mehrfach vorkommen!
Ich bin ratlos.. ein Ansatz hatte ich oben mit angehängt
MSDN - XML DOM
vielleicht hilft das weiter.
Zitat:
[...In einem XML-Dokument traversieren Sie die Knoten, die vom Dokumentobjekt offen gelegt werden. Da XML-Dokumente hierarchischer Natur sind, ist es relativ einfach, für das Traversieren des gesamten Dokuments eine rekursive Routine zu schreiben. ...]
In einer textbasierten Sprache ist das einfach umzusetzten, respektive kann übersichtlicher gestallten werden, da IMHO die Property- / Invoke- Nodes in LabVIEW einfach zu gross sind...
In theory, there is no difference between theory and practice; In practice, there is.
(12.10.2012 12:26 )&lt;&lt;oenk&gt;&gt; schrieb: MSDN - XML DOM
vielleicht hilft das weiter.
Ja und Nein. Denn, rein theoretisch ist mir das schon klar wie ich das machen muss. Eine Routine habe ich auch hinbekommen - aber nur für den Fall dass ein Knoten einmalig ist (einmalige Bezeichnung) .
Bei meinem Vorschlag (siehe oben) bekomme ich ein Array an Nodes zurück dass ich einfach so verwenden könnte... Geht aber in dem Fall iwie nicht wo ich eine verschachtelte Suche machen muss: Zuerst "Person1" (als Bsp.) suchen, dann das Alter, dann replace.
GRML.. Hast du eine konkrete Idee wie das mit dem ActiveX in LabView aussehen könnte?
Ich komm hier mit meinem gebastele nicht mehr weiter :-(
anscheinend ist dir der Aufbau deiner XML-Datei bekannt. Du kannst also deine Datei in passende Cluster umwandeln und diese dann wieder in passenden XML-"Text".
Wenn du schon eine funktionierende Routine hast, wo ist dann das Problem, die Daten einer Person zu suchen und nur die zu ändern?
Ich bin kein Fan von dem Spruch, aber:
lad doch mal dein Gebastel (deine Bezeichnung, nicht meine ) mit einer Beispiel XML-Datei hoch, dann ist's vielleicht einfacher zum helfen...
Wenn das nicht geht, dann mach's doch so:
such nach Knoten "PersonX", innerhalb dieses Knotens nach dem zu ersetztenden Knoten, et voila, schon läuft die Sache...Wenn du natürlich direkt von Root aus nach deinem expliziten Knoten suchst wird das wie schon erwähnt nicht funktionieren, da es davon mehrere gibt.
Wie schon gestern erwähng: du musst das Dokument traversieren, du kannst nicht direkt darauf zugreifen...
In theory, there is no difference between theory and practice; In practice, there is.
Chuck Reid
16.10.2012, 12:26 (Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2012 12:30 von stoevinho.)
anscheinend ist dir der Aufbau deiner XML-Datei bekannt. Du kannst also deine Datei in passende Cluster umwandeln und diese dann wieder in passenden XML-"Text".
Der Aufbau ist mir bekannt - siehe meinen Post oben. Die Variante, dass ich dass in ein Cluster caste, dann einen oder mehrere Strings ändere und vom Cluster wieder in XML Type caste war mir fremd. Klingt aber theoretisch möglich - das behalte ich mir als Backup-Lösung im Hinterkopf.
(15.10.2012 14:12 )GerdW schrieb: Wenn du schon eine funktionierende Routine hast, wo ist dann das Problem, die Daten einer Person zu suchen und nur die zu ändern?
Die Routine zum Ändern eines Abschnittes hängt an (). !!!! Aber siehe Post oben: Es gibt gleichnamige Knoten/Kinder. Kinder sind nicht eineindeutig beschrieben, weshalb die Routine nicht mehr geht. Wie kann ich meine funktionierende Routine abändern/anpassen?
(16.10.2012 10:14 )&lt;&lt;oenk&gt;&gt; schrieb: Ich bin kein Fan von dem Spruch, aber:
lad doch mal dein Gebastel (deine Bezeichnung, nicht meine ) mit einer Beispiel XML-Datei hoch, dann ist's vielleicht einfacher zum helfen...
Wenn das nicht geht, dann mach's doch so:
such nach Knoten "PersonX", innerhalb dieses Knotens nach dem zu ersetztenden Knoten, et voila, schon läuft die Sache...Wenn du natürlich direkt von Root aus nach deinem expliziten Knoten suchst wird das wie schon erwähnt nicht funktionieren, da es davon mehrere gibt.
Wie schon gestern erwähng: du musst das Dokument traversieren, du kannst nicht direkt darauf zugreifen...
Schon erledigt,
und eben, das verschachtelte Suchen - das is das, was ich nicht kann :-(
Noch nicht.. tschakka!