Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi XML-Dateien (https://www.delphipraxis.net/785-xml-dateien.html)

CalganX 6. Sep 2002 13:39


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

CalganX 6. Sep 2002 18:23

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

MathiasSimmack 6. Sep 2002 18:42

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:
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');
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:
Code:
for i := 0 to node.childNodes.length - 1 do
  ...
Dann gäbe es noch den Weg mit dem "IXMLDOMElement":
Code:
item := xmldoc.createElement('MeinElement');
item.setAttribute('Wert',123);
was folgendes Ergebnis hätte:
Code:
<MeinElement Wert="123"/>
Natürlich kannst du die auch in den XML-Baum einhängen.

Wenn du gezielt nach etwas suchst, empfehle ich "IXMLDOMNodeList":
Code:
nl := xmldoc.getElementsByTagName('MeinNode');
if(nl.length > 0) then
  // mach was damit
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.

usw.

Ich hoffe, ich konnte ein bisschen helfen.

Gruß,
Mathias.

CalganX 8. Sep 2002 10:52

??? Ich bin da jetzt zu 80% durchgestiegen. Also, was ich möchte ist, dass meine erste XML-Datei
Code:
<?xml version="1.0">
<oe>
 <bm>
  <n>blabla</n>
  <u>www.irgendwas.de</u>
 </bm>
</oe>
um
Code:
<bm>
 <n>bla2</n>
 <u>www.nix.de</u>
</bm>
erweitert wird. Der letzte Teil sollte eigentlich vor </oe> eingesetzt werden...

Chris

MathiasSimmack 8. Sep 2002 12:29

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:
var
  xmldoc : DOMDocument;
benutzen, was mit dem erwähnten Interface identisch ist. Bei einer neueren Version (XML 4) wird es dann wahrscheinlich auch ein aktuelleres Interface sein.

Du lädtst also die XML-Datei:
Code:
if(xmldoc.load('MeineXML.xml')) then
  begin
setzt eine Referenz auf den Hauptknoten (bei dir "oe")
Code:
    node := xmldoc.documentElement;
    // zum beweis -->
    ShowMessage(node.xml);
und erstellst deinen neuen Knoten:
Code:
    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);
und den neuen Knoten hängst du dann ein:
Code:
    node.appendChild(sub1);
    xmldoc.save('MeineXML2.xml');
  end;
Deine XML-Datei sollte jetzt so aussehen:
Code:
<?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>
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.

Die Variablendeklarationen vielleicht noch
Code:
var
  node,
  sub1,
  sub2 : IXMLDOMNode;
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.

NiLS-Da-BuBi 25. Dez 2002 02:19

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:25 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