AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

HowTo: XML-SingleNode löschen

Ein Thema von CalganX · begonnen am 9. Dez 2002 · letzter Beitrag vom 11. Dez 2002
Antwort Antwort
Seite 1 von 2  1 2      
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

HowTo: XML-SingleNode löschen

  Alt 9. Dez 2002, 18:50
Hi,
ich habe diese XML-Datei (Ausschnitt):
Code:
<obele>
 <test>
  <sub1>bla</sub1>
  <sub2>bla</sub2>
 </test>

 <test>
  <sub1>bla2</sub1>
  <sub2>bla2</sub2>
 </test>

</obele>
Nun will ich die erste test-Node mitsamt unterelement daraus haben? How to do? Arbeite mit IXMLDOMDocument2...

Chris
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: HowTo: XML-SingleNode löschen

  Alt 9. Dez 2002, 19:30
Delphi-Quellcode:
var
  Node: IXMLDOMNode;
...
  // Node holen
  Node := xmlDoc.documentElement.selectSingleNode('test');
  // Node entfernen.
  Node.parentNode.removeNode(Node);

Zitat von Chakotay1308:
Arbeite mit IXMLDOMDocument2...
Womit auch sonst.
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3
  Alt 10. Dez 2002, 13:38
Zitat von Delphi-Debugger:
Undecleared Indentifier: removeNode
???

Chris
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4
  Alt 10. Dez 2002, 18:23
sakura meinte sicher
Code:
removeChild
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.
Code:
Node.
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.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#5
  Alt 10. Dez 2002, 19:56
Hi Matthias,
Zitat:
Wer lesen kann ist klar im Vorteil!
Und nebenbei: auf die Idee mit removeChild bin ich auch schon gekommen, nur tut sich da nix! Und die Syntax-Vervollständigung klappt auch nicht auf.
Hier mal, dass, was ich bei mir derzeit stehen habe:

Delphi-Quellcode:
  Vok := xmldoc.documentElement.selectNodes('/Vokabeln/vokabel[Latein="'+substr+'"]').item[0];
  Vok.parentNode.removeChild(Vok);
  UpdateVokList(Listbox2.Items);
Vok ist IXMLDOMNode...

Chris
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6
  Alt 10. Dez 2002, 21:10
Zitat von Chakotay1308:
Wer lesen kann ist klar im Vorteil!

Zitat von Delphi PRAXiS:
Chakotay1308
Delphi 6 Enterprise
Meine Frage nach deiner Delphi-Version war ironischer Natur, da besagte Vervollständigungsfunktion standardmäßig aktiviert ist.


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.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7
  Alt 11. Dez 2002, 13:57
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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8
  Alt 11. Dez 2002, 15:57
Das Problem bei sakura's Code: da wird die erste herausgeholt, ggf. kann das auch eine andere sein (meinetwegen die 3.)...

Chris
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#9
  Alt 11. Dez 2002, 18:44
Hi Chrisssssssssssssss!

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:
node := xmldoc.selectSingleNode('obele/test[sub1="bla"]');
if(node <> nil) then
  node.parentNode.removeChild(node);

ShowMessage(xmldoc.xml);
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?
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#10
  Alt 11. Dez 2002, 19:27
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:
  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);
Also, ich verstehe das jetzt nicht mehr...

Chris
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz