INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

XML (Sub)Node Replace



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!

12.10.2012, 08:36
Beitrag #1

stoevinho Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Aug 2012

2010
2012
DE



XML (Sub)Node Replace
Halllooo und guten morgen an alle fleißigen Mitleser ;-)

ich habe mir per Lv10.0 eine XML erstellt.
Das Ergebnis sieht wiefolgt aus:

Code:
<Signatur>
<Stadt>
<Name>A</Name>
<Personen>
<Person1>
<Name>X.</>
<Alter>1</>
<Beruf>E</>
<Gehalt>2</>
</Person1>
<Person2>
<Name>Y</>
<Alter>1</>
<Beruf>E</>
<Gehalt>2</>
</Person2>
</Personen>
</Stadt>
</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!!!!

Lv10.0
Win7

;-)


Angehängte Datei(en)
10.0 .vi  Replace_Node.vi (Größe: 13,96 KB / Downloads: 274)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
12.10.2012, 10:30
Beitrag #2

oenk Offline
LVF-Stammgast
***


Beiträge: 361
Registriert seit: May 2005

>= 7.1
2004
EN

3018
Schweiz
RE: XML (Sub)Node Replace
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 Cool)...). 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.

Chuck Reid
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.10.2012, 11:30
Beitrag #3

stoevinho Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Aug 2012

2010
2012
DE



RE: XML (Sub)Node Replace
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!" Big Grin

Fas is nen riesiges Projekt und die Xml nur eine gabz kleine Geschichte. Es muss Lv10 sein Sad

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 :-((
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.10.2012, 12:26
Beitrag #4

oenk Offline
LVF-Stammgast
***


Beiträge: 361
Registriert seit: May 2005

>= 7.1
2004
EN

3018
Schweiz
RE: XML (Sub)Node Replace
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.

Chuck Reid
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.10.2012, 13:54
Beitrag #5

stoevinho Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Aug 2012

2010
2012
DE



RE: XML (Sub)Node Replace
(12.10.2012 12:26 )&amp;lt;&amp;lt;oenk&amp;gt;&amp;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) Ahrg1.
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? Blink

Ich komm hier mit meinem gebastele nicht mehr weiter :-(
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.10.2012, 14:12
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: XML (Sub)Node Replace
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?
Hmm

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.10.2012, 10:14
Beitrag #7

oenk Offline
LVF-Stammgast
***


Beiträge: 361
Registriert seit: May 2005

>= 7.1
2004
EN

3018
Schweiz
RE: XML (Sub)Node Replace
Ich bin kein Fan von dem Spruch, aber:
lad doch mal dein Gebastel (deine Bezeichnung, nicht meine Cool) 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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.10.2012, 12:26 (Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2012 12:30 von stoevinho.)
Beitrag #8

stoevinho Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Aug 2012

2010
2012
DE



RE: XML (Sub)Node Replace

10.0 .vi  Replace_Node.vi (Größe: 23,58 KB / Downloads: 245)
(15.10.2012 14:12 )GerdW schrieb:  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".

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?
Hmm

Die Routine zum Ändern eines Abschnittes hängt an (Lv10). !!!! 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>
<Stadt>
<Name>A</Name>
<Personen>
<Person1>
<Name>X.</Name>
<Alter>1</Alter>
<Beruf>E</Beruf>
<Gehalt>2</Gehalt>
</Person1>
<Person2>
<Name>Y</Name>
<Alter>1</Alter>
<Beruf>E</Beruf>
<Gehalt>2</Gehalt>
</Person2>
</Personen>
</Stadt>
</Signatur>

(16.10.2012 10:14 )&amp;lt;&amp;lt;oenk&amp;gt;&amp;gt; schrieb:  Ich bin kein Fan von dem Spruch, aber:
lad doch mal dein Gebastel (deine Bezeichnung, nicht meine Cool) 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! Blush
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.10.2012, 06:59
Beitrag #9

oenk Offline
LVF-Stammgast
***


Beiträge: 361
Registriert seit: May 2005

>= 7.1
2004
EN

3018
Schweiz
RE: XML (Sub)Node Replace

Akzeptierte Lösung

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


Angehängte Datei(en)
10.0 .vi  Replace_Node_new.vi (Größe: 22,34 KB / Downloads: 337)

In theory, there is no difference between theory and practice; In practice, there is.

Chuck Reid
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.11.2012, 00:14
Beitrag #10

stoevinho Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Aug 2012

2010
2012
DE



RE: XML (Sub)Node Replace
Vielen vielen Dank für die Hilfe! Das reicht mir, habe das Thema letztendlich selbstständig lösen können. Vielen vielen DANK!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Probs mit "Replace Substring"-Funktion marvin71 4 4.837 12.06.2006 15:36
Letzter Beitrag: marvin71

Gehe zu: