AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit XML Datei

Ein Thema von Akut-Programming · begonnen am 28. Okt 2003 · letzter Beitrag vom 29. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#1

Problem mit XML Datei

  Alt 28. Okt 2003, 18:09
Hi!

Ich bastle grad mal wieder einwenig rum und hab nun ein Problem mit dem schreiben in meine XML Datei.
Da ich schon n Prog hab, in dem ich dat verwende, hab ich auch den Code daraus genommen un noch einwenig angepasst. Ja nur kommt nun ne Zugriffsverletzung...
Delphi-Quellcode:
uses ... MSXML2_TLB; //XML 4 ist auch installiert

type ...

   public
    { Public-Deklarationen }
    instpath: string;
    xmlDoc: IXMLDOMDocument2;
end;

...

const
 xmlfilename='Data/buddys.xml';

...

procedure Tfrm_new.bn_speichernClick(Sender: TObject);
var
  newBuddy, newSub: IXMLDOMNode;
begin
  if (ed_name.Text='') or (ed_vorname.Text='')
  then begin
    ShowMessage('Name bzw. Vorname wurde nicht ausgefüllt - Eingabe benötigt!');
  end else
  begin
    xmlDoc:=frm_main.xmlDoc;
    newBuddy := xmldoc.createElement('Buddy');
    newSub := xmldoc.createElement('BuddyID');
    newSub.text := ed_buddyid.Text;
    newBuddy.appendChild(newSub);

    newSub := xmlDoc.createElement('Name');
    newSub.text := ed_name.Text;
    newBuddy.appendChild(newSub);

    newSub := xmlDoc.createElement('Vorname');
    newSub.text :=ed_vorname.Text;
    newBuddy.appendChild(newSub);

    ...
    
    newSub := xmlDoc.createElement('Sonstiges');
    newSub.text := mem_sonstiges.Text;
    newBuddy.appendChild(newSub);

    newSub := xmlDoc.createElement('Bild');
    newSub.text := ed_picname.Text;
    newBuddy.appendChild(newSub);

    xmlDoc.documentElement.appendChild(newBuddy); //Hier bekomm ich die Zugriffsverletzung
    xmlDoc.save(frm_main.instpath + xmlfilename);

    ClearEdits;
    frm_new.Close;
  end;
end;
Kann mir vielleicht ein DPler den Fehler nennen!? - Hatte schon probiert aber mit XML hab ichs noch nich so

THX & Greetz,
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: Problem mit XML Datei

  Alt 29. Okt 2003, 12:18
Das Beispiel ist an sich korrekt. Eine Zugriffsverletzung erhältst du nur, wenn das benutzte XML-Dokument noch leer ist. Das solltest du vielleicht mal prüfen.

Oder anders gesagt: was passiert in deinem Programm, wenn die XML-Datei noch nicht existiert? Wird es dann beendet, oder startet es trotzdem? Im zweiten Fall solltest du schauen, ob du dem Dokument die Grundstruktur übergibst, bspw:
Code:
xmldoc.loadXML('<buddies/>');
oder was immer dein Hauptknoten ist. Dann dürfte es keinen Fehler mehr geben.
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#3

Re: Problem mit XML Datei

  Alt 29. Okt 2003, 13:47
Na momentan ist meine XML Datei noch leer- will ja mit dieser Prozedur in sie schreiben. Sie ist auch vorhanden. Ich frage im OnCreate des Hauptformulars ab, ob die Datei existiert, wenn nicht, dann soll er sie anlegen. Weiß da jetzt nich mehr weiter was ich noch machen soll.
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: Problem mit XML Datei

  Alt 29. Okt 2003, 14:18
Wie: du weißt nicht weiter? Ich habe dir doch gesagt, was du tun musst. Wenn die Datei nicht existiert, dann hilft es auch nicht, sie anzulegen (physisch auf der Platte) - das XML-Dokument (xmlDoc) im Programm ist trotzdem noch leer. Du musst also den Basis-XML-Code reinschreiben. Ich habe allerdings keine Ahnung, wie deine Datei aufgebaut ist, darum ja von mir nur der Vorschlag mit
xmlDoc.loadXML('<buddies/>'); Und: was so einfach geht, geht auch ausführlicher:
xmlDoc.loadXML('<?xml version="1.0"?><buddies/>'); Was du eben so brauchst ...

Wenn ich das mache, erhalte ich keine Zugriffsverletzung.
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#5

Re: Problem mit XML Datei

  Alt 29. Okt 2003, 16:32
Soll ich das dann hier unterbringen??

Delphi-Quellcode:
..
xmlDoc.loadXML('<?xml version="1.0"?><buddies/>');
xmlDoc.documentElement.appendChild(newBuddy);
xmlDoc.save(frm_main.instpath + xmlfilename);

...
Sorry, muss mich erst noch mehr in XML reinhängen.
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#6

Re: Problem mit XML Datei

  Alt 29. Okt 2003, 17:17
Also wenn ich mir den XML Code meiner anderen Anwendung anschaue und ihn dann auf meine Anwendung umstellen würde, würd ich es mir so vorstellen.
XML-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<BuddLister>
   <Buddy>
      <BuddyID>1</BuddyID>
      <Name>Schmit</Name>
      <Vorname>Achim</Vorname>
      ...
   </Buddy>
</BuddyLister>
Aber eigentlich mach ich doch nu auch nix anderes in dieser Anwendung als in der Anderen wenn ich speichern will, wie gesagt, habe den benötigten Code kopiert und umgestellt.
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7

Re: Problem mit XML Datei

  Alt 29. Okt 2003, 17:42
Also, du hast in deinem Hauptformular irgendwo "xmlDoc" deklariert, das sehe ich an dieser Zeile:
xmlDoc:=frm_main.xmlDoc; Und im "OnCreate" dieser Form (frm_main) wirst du schätzungsweise versuchen, die XML-Datei zu laden bzw. zu suchen, bspw. so:
Delphi-Quellcode:
if(fileexists('blabla.xml')) then
  xmldoc.load('blabla.xml')
Der Sinn ist jetzt, im Fall eines Fehlers (Datei existiert nicht), das Dokument zu erzeugen
Delphi-Quellcode:
else
  xmldoc.loadXML('<?xml version="1.0" encoding="iso-8859-1"?><BuddLister/>');
Du kannst nach dem Laden einer existierenden Datei auch auf Nummer sicher gehen mit:
Delphi-Quellcode:
if(xmldoc.documentElement.Get_NodeName <> 'BuddLister') then
  xmldoc.loadXML('<?xml version="1.0" encoding="iso-8859-1"?><BuddLister/>');
Falls also irgendwer die XML-Datei manipuliert und den Namen des Root-Knotens geändert hat, wird das so erkannt, und du erstellst das Dokument auch wieder neu. Damit gehen aber evtl. vorhandene "Buddy"-Knoten verloren. Wobei sich dieses Problem natürlich auch lösen lässt.

So habe ich mir das vorgestellt, und wenn du das mal probierst, dann solltest du auch keine Fehlermeldung bekommen. Wichtig an der ganzen Geschichte war einfach nur, dass es nicht ausreicht, eine leere XML-Datei zu erzeugen. Damit ist das XML-Dokument im Programm (xmlDoc) trotzdem noch leer. Es gibt keinen Root-Knoten (xmldoc.documentElement), und dadurch kam es zur Zugriffsverletzung, weil du versucht hast, den erstellten Knoten an einen nicht existierenden Root-Knoten anzuhängen.
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#8

Re: Problem mit XML Datei

  Alt 29. Okt 2003, 18:01
Hui - Dat war echt perfekt erklärt, werd mich dran versuchen. THX
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#9

Re: Problem mit XML Datei

  Alt 29. Okt 2003, 18:17

Also entweder schlägt mir meine kleene Angina zu sehr offn Kopp, dat ichs nich hinkrieg aber es will immernoch nich. Habs jetzt wie du meintest ins OnCreate des Hauptform geschrieben. Jetzt kommts da zuner Zugriffsverletzung..

Delphi-Quellcode:
unit main;

interface

uses
   ..
   MSXML2_TLB;

type
  Tfrm_main = class(TForm)
   ...
  public
    { Public-Deklarationen }
    instpath: string;
    xmlDoc: IXMLDOMDocument2;
  end;
const
 xmlfilename='Data/buddys.xml';

procedure Tfrm_main.FormCreate(Sender: TObject);
begin
  instpath:=ExtractFilePath(Application.ExeName);
  if not FileExists(xmlfilename) then FileCreate(xmlfilename);
  if FileExists(xmlfilename) then xmlDoc.load(xmlfilename) // Hier gibts diesma die Zugriffsverletzung
  else xmldoc.loadXML('<?xml version="1.0" encoding="iso-8859-1"?><BuddLister/>');
  xmlDoc := CoDOMDocument40.Create;
  xmlDoc.setProperty('NewParser', true);
end;
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: Problem mit XML Datei

  Alt 29. Okt 2003, 18:23
Na, das ist doch wohl logisch.
Code:
[color=#ff0000]else xmldoc.loadXML('<?xml version="1.0" encoding="iso-8859-1"?><BuddLister/>');[/color]
xmlDoc := CoDOMDocument40.Create;
xmlDoc.setProperty('NewParser', true);
Bevor du das XML-Dokument erzeugst, schreibst du Code rein? Denk mal darüber nach
  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 00:18 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