![]() |
XML-Dateien
Hi,
ich glaube sakura hat mir das bereits erklärt, aber noch einmal die Frage: wie kann ich auf die Inhalte einer XML-Dateien zugreifen (ich brauch nur den Source). Dann die eigentliche Frage: Wie kann ich in XML-Dateien schreiben? Chris |
So, hab' den Beitrag wiedergefunden...
Meine Frage nun: Wie kann man in XML-Dateien schreiben? Also, dass man meinet wegen noch eine Node hinzufügt (mit Inhalt)... Help, sakura.. :angle2: Chris |
Macht´s dir was aus, wenn ich antworte? Ich bin nämlich nicht sakura. :wink: Du erzeugst z.B. einen neuen "IXMLDOMNode" und füllst ihn mit Leben:
Code:
Die Variablendeklarationen müssten dir bekannt sein, weil du sie ja auch für den Lesezugriff brauchst. Wie sie bei dir heißen, weiß ich natürlich nicht, aber am Prinzip ändert das ja nichts. Vielleicht solltest du aber bei dem Weg vorher checken, ob´s den Knoten vielleicht schon gibt:
sub := xmldoc.createElement('MeinNode');
sub.Text := 'Hallo, Welt!'; node := xmldoc.documentElement; // das komplette XML-Dokument node.appendChild(sub); // neuen Knoten einhängen xmldoc.save('MeineDatei.xml');
Code:
Dann gäbe es noch den Weg mit dem "IXMLDOMElement":
for i := 0 to node.childNodes.length - 1 do
...
Code:
was folgendes Ergebnis hätte:
item := xmldoc.createElement('MeinElement');
item.setAttribute('Wert',123);
Code:
Natürlich kannst du die auch in den XML-Baum einhängen.
<MeinElement Wert="123"/>
Wenn du gezielt nach etwas suchst, empfehle ich "IXMLDOMNodeList":
Code:
Das würde dir alle Knoten mit dem Namen "MeinNode" in eine Liste schreiben. Macht sich gut, wenn du gezielt einen Knoten ergänzen möchtest, der aber u.U. mehrfach auftreten kann.
nl := xmldoc.getElementsByTagName('MeinNode');
if(nl.length > 0) then // mach was damit usw. Ich hoffe, ich konnte ein bisschen helfen. Gruß, Mathias. |
??? Ich bin da jetzt zu 80% durchgestiegen. Also, was ich möchte ist, dass meine erste XML-Datei
Code:
um
<?xml version="1.0">
<oe> <bm> <n>blabla</n> <u>www.irgendwas.de</u> </bm> </oe>
Code:
erweitert wird. Der letzte Teil sollte eigentlich vor </oe> eingesetzt werden...
<bm>
<n>bla2</n> <u>www.nix.de</u> </bm> Chris |
Ich weiß jetzt nicht, welches Interface zu benutzt. Wie ich schon beim Thema "HTML Help Collection" schrieb habe ich mich für "IXMLDOMDocument2" entschieden, was aber wohl XML 3.0 als Minimum erfordert. Wenn du die Typbibliothek von XML 3.0 importierst, kannst du
Code:
benutzen, was mit dem erwähnten Interface identisch ist. Bei einer neueren Version (XML 4) wird es dann wahrscheinlich auch ein aktuelleres Interface sein.
var
xmldoc : DOMDocument; Du lädtst also die XML-Datei:
Code:
setzt eine Referenz auf den Hauptknoten (bei dir "oe")
if(xmldoc.load('MeineXML.xml')) then
begin
Code:
und erstellst deinen neuen Knoten:
node := xmldoc.documentElement;
// zum beweis --> ShowMessage(node.xml);
Code:
und den neuen Knoten hängst du dann ein:
sub1 := xmldoc.createElement('bm');
sub2 := xmldoc.createElement('n'); sub2.Text := 'bla2'; sub1.appendChild(sub2); sub2 := xmldoc.createElement('u'); sub2.Text := 'www.nix.de'; sub1.appendChild(sub1);
Code:
Deine XML-Datei sollte jetzt so aussehen:
node.appendChild(sub1);
xmldoc.save('MeineXML2.xml'); end;
Code:
Hattest du dir das so gedacht? Wenn du die URL in dem schon vorhandenen Knoten ersetzen willst, dann musst du vorher schauen, ob ein Knoten namens "bm" schon da ist. Das geht über die "childNodes" von der "node"-Variablen und lässt sich am besten mit einer Stringliste usw. vergleichen.
<?xml version="1.0">
<oe> <bm> <n>blabla</n> <u>www.irgendwas.de</u> </bm> <bm> <n>bla2</n> <u>www.nix.de</u> </bm> </oe> Die Variablendeklarationen vielleicht noch
Code:
Kann sein, dass ich mich jetzt irgendwo vielleicht vertippt habe (war nur aus´m Kopf), aber das Prinzip (würde ich denken) sieht so aus.
var
node, sub1, sub2 : IXMLDOMNode; |
Danke - hat auch mir geholfen :) - Ich habe gerade XML gelernt - ist ja recht simpel... nun beschäftige ich mich damit wie ich XML mit Delphi nutzen kann. Eben auch zu so einem Zweck Daten - ablegen - editieren und ersetzen/löschen... ursprünglich wär eine Datenbank die gewünschte Lösung aber mit XML entfallen anforderungen wie die BDE... XML scheint mir hier eine gute Lösung.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 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