XML (Sub)Node Replace - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO) +---- Thema: XML (Sub)Node Replace (/Thread-XML-Sub-Node-Replace) Seiten: 1 2 |
XML (Sub)Node Replace - stoevinho - 12.10.2012 08:36 Halllooo und guten morgen an alle fleißigen Mitleser ;-) ich habe mir per .0 eine XML erstellt. Das Ergebnis sieht wiefolgt aus: Code: <Signatur> Soweit so gut. 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). Könnt ihr mir da weiterhelfen? Einen Ansatz habe ich schon mal hochgeladen. Vielen Dank im Voraus!!!! .0 Win7 ;-) RE: XML (Sub)Node Replace - oenk - 12.10.2012 10:30 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 RE: XML (Sub)Node Replace - stoevinho - 12.10.2012 11:30 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 Hüülfe :-(( RE: XML (Sub)Node Replace - oenk - 12.10.2012 12:26 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... RE: XML (Sub)Node Replace - stoevinho - 15.10.2012 13:54 (12.10.2012 12:26 )&lt;&lt;oenk&gt;&gt; schrieb: MSDN - XML DOM 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 :-( RE: XML (Sub)Node Replace - GerdW - 15.10.2012 14:12 Hallo 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". Wenn du schon eine funktionierende Routine hast, wo ist dann das Problem, die Daten einer Person zu suchen und nur die zu ändern? RE: XML (Sub)Node Replace - oenk - 16.10.2012 10:14 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... RE: XML (Sub)Node Replace - stoevinho - 16.10.2012 12:26 [attachment=41873] (15.10.2012 14:12 )GerdW schrieb: Hallo stoevinho, 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? Vielen Dank voraus Grüße stoevinho PS: XML Code: <Signatur> (16.10.2012 10:14 )&lt;&lt;oenk&gt;&gt; schrieb: Ich bin kein Fan von dem Spruch, aber: Schon erledigt, und eben, das verschachtelte Suchen - das is das, was ich nicht kann :-( Noch nicht.. tschakka! RE: XML (Sub)Node Replace - oenk - 17.10.2012 06:59 Hier mal eine Version wie du den richtigen Knoten findest. Wie du jetzt den Wert ändern kannst, musst du selber rausfinden... Schau dir auch mal die Beispiele dazu an: ...\NI\LabVIEW 2010\examples\xml Viel Erfolg Gruess, \c RE: XML (Sub)Node Replace - stoevinho - 11.11.2012 00:14 Vielen vielen Dank für die Hilfe! Das reicht mir, habe das Thema letztendlich selbstständig lösen können. Vielen vielen DANK! |