AGB  ·  Datenschutz  ·  Impressum  







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

XML-Dateien

Ein Thema von CalganX · begonnen am 6. Sep 2002 · letzter Beitrag vom 25. Dez 2002
Antwort Antwort
CalganX

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

XML-Dateien

  Alt 6. Sep 2002, 14:39
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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 6. Sep 2002, 19: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..

Chris
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3
  Alt 6. Sep 2002, 19:42
Macht´s dir was aus, wenn ich antworte? Ich bin nämlich nicht sakura. 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.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4
  Alt 8. Sep 2002, 11: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
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5
  Alt 8. Sep 2002, 13: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.
  Mit Zitat antworten Zitat
NiLS-Da-BuBi

Registriert seit: 12. Nov 2002
Ort: Daun, Rheinland-Pfalz
25 Beiträge
 
Delphi 4 Client/Server
 
#6
  Alt 25. Dez 2002, 03: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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:34 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