![]() |
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 |
Falls du die Lösung nicht von allein findest, dann hänge doch einfach mal bitte deine XML-Datei ran. Dann kann man das mal mit der richtigen Datei testen. Ich weiß doch nicht, mit welchen Substrings du arbeitest ... und ein bisschen Latein wollte ich mir auch schon immer mal angucken ... :)
|
Liste der Anhänge anzeigen (Anzahl: 1)
Gut... Probleme finde ich nirgends...
Im Anhang eine/die (unformatierte) XML-Datei (nebenbei sind das ca. 90 Vokabeln). Einfach von TXT nach XML umbennen... Chris |
Hi Chris.
Ich hab´s mir einfach gemacht und nur die lateinischen Begriffe alle in eine Listbox gelesen; einen davon ausgewählt (accusare), auf einen Button geklickt ... und fort war er ... Ich habe die Datei extra mit einem neuen Namen speichern lassen (zum Vergleichen). Von "anklagen" fehlte danach jede Spur. Ich weiß jetzt auch keinen Rat mehr. Was bleibt noch übrig? Ein Fehler beim Kopieren des Substring vielleicht? Wie gesagt, ich habe auf die Schnelle bloß die lateinischen Vokabeln in die Listbox schreiben lassen. Mein Rat: deinen Anhang ändern und mal den Source deines Programms zippen. (*hi hi* so bringt man Leute dazu, ihren Source rauszugeben ... :twisted:) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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