![]() |
HowTo: XML-SingleNode löschen
Hi,
ich habe diese XML-Datei (Ausschnitt):
Code:
Nun will ich die erste test-Node mitsamt unterelement daraus haben? How to do? Arbeite mit IXMLDOMDocument2...
<obele>
<test> <sub1>bla</sub1> <sub2>bla</sub2> </test> <test> <sub1>bla2</sub1> <sub2>bla2</sub2> </test> </obele> Chris |
Re: HowTo: XML-SingleNode löschen
Delphi-Quellcode:
var
Node: IXMLDOMNode; ... // Node holen Node := xmlDoc.documentElement.selectSingleNode('test'); // Node entfernen. Node.parentNode.removeNode(Node); Zitat:
|
Zitat:
Chris |
sakura meinte sicher
Code:
Welche Delphi-Version hast du, Chris? Delphi 1? Es gibt so was wie die Vervollständigung von Code, Syntax, Klassen-Eigenschaften usw. Im Normalfall reicht es, z.B.
removeChild
Code:
einzutippen und zu warten. Kurz darauf präsentiert dir Delphi die Möglichkeiten der Variable "IXMLDOMNode". Dann tippst du bloß auf R und E und solltest neben "replaceChild" auch auf besagtes "removeChild" stoßen.
Node.
|
Hi Matthias,
Zitat:
Hier mal, dass, was ich bei mir derzeit stehen habe:
Delphi-Quellcode:
Vok ist IXMLDOMNode...
Vok := xmldoc.documentElement.selectNodes('/Vokabeln/vokabel[Latein="'+substr+'"]').item[0];
Vok.parentNode.removeChild(Vok); UpdateVokList(Listbox2.Items); Chris |
Zitat:
Zitat:
Wo der Fehler liegt, kann ich dir nicht sagen, da es für mich erst mal vernünftig aussieht. Auch wenn ich nicht verstehe, warum du jetzt das erste Element einer Node-Liste abfragst und nicht bei dem "singleNode" von sakura geblieben bist. Abgesehen davon sollte dein Code funktionieren. Wird der Knoten nicht gelöscht? Wird die Datei nicht neu geschrieben? Wird vielleicht die Listbox bloß nicht richtig aktualisiert? M(it) f(estlichen) G(rüßen) Mathias. |
Hi Matthias,
der Knoten wird nicht gelöscht. An der Funktion bzgl. der Listbox kann nichts falsch sein, da sie bei einem anderen Button problemlos funktioniert... Chris |
Das Problem bei sakura's Code: da wird die erste herausgeholt, ggf. kann das auch eine andere sein (meinetwegen die 3.)...
Chris |
Hi Chrisssssssssssssss! :wink:
Ich bin zwar nun auch kein XML-Genie, aber da du gezielt nach irgendeiner Vokabel suchst, kommst du mit "selectSingleNode" auf das selbe Ergebnis. Deine andere Behauptung (sorry, ich nenn´s mal so!) kann ich auch nicht nachvollziehen. Ich habe mir mal deine oben gepostete XML-Beispieldatei genommen und gezielt den ersten "test"-Unterknoten entfernt:
Code:
Ging problemlos. Der Knoten war danach weg, und das war ja auch gewollt. Nun ist es nur ein Beispiel; aber ich sag´ mal so: der Code an sich ist schon in Ordnung. Vielleicht ist´s wieder nur ein Tippfehler irgendwo bei dir im Programm? :?
node := xmldoc.selectSingleNode('obele/test[sub1="bla"]');
if(node <> nil) then node.parentNode.removeChild(node); ShowMessage(xmldoc.xml); |
Hi Matthias, dann sieh dir mal bitte folgenden Source genauer an! Ich kann dir sagen, es wird der Knoten nicht gelöscht. Genauso wenig, wie dass ein Fehler angezeigt wird. Ich kann dir ggf. auch Screenshots geben! Ich kann dir schwören, dass das eigentlich funktionieren müsste! Denn ich glaube dir auch, dass das bei dir klappt.
Das Problem ist: Die Node existiert ja (Vok ist ja auch nicht nil)...
Delphi-Quellcode:
Also, ich verstehe das jetzt nicht mehr... :wiejetzt: :wiejetzt: :wiejetzt:
substr := copy(ListBox2.Items[ListBox2.ItemIndex], 0, lastpos('-',ListBox2.Items[ListBox2.ItemIndex])-2); { Der string sollte eingentlich richtig sein (siehe n. Zeile) }
ShowMessage(substr); { nur zur Überpfrüfung... } Vok := xmldoc.documentElement.selectSingleNode('/Vokabeln/vokabel[Latein="'+substr+'"]'); if (Vok<>nil) then Vok.parentNode.removeChild(Vok) else MessageDlg('Schwerer Programmfehler: Löschen der Node war nicht '+#13+#10+'erfolgreich...', mtError, [mbOK], 0); UpdateVokList(Listbox2.Items); Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz