AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Datei bearbeiten und nur Teile wieder speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Datei bearbeiten und nur Teile wieder speichern

Ein Thema von Hoschie · begonnen am 29. Feb 2008 · letzter Beitrag vom 8. Mär 2008
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#21

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 2. Mär 2008, 14:17
Ich werde es gleich nachher mal ausprobieren.

Lob und Anerkennung für Deine Geduld und Deine Mühen(vor allem der Geduld ).

Gruß
Hoschie
  Mit Zitat antworten Zitat
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#22

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 2. Mär 2008, 15:45
OK, es will nicht funktionieren.

Hier mal mein Quellcode :

Delphi-Quellcode:
// in der Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw_TLB, ActiveX, MSXML2_TLB;

// Prozedur mit Fehler
procedure TForm2.saveBody ();
var // Variablendeklaration
fnNew: TFileName;
ws,s: WideString;
doc: OleVariant;
f, log: TextFile;
u, xdNew: IXMLDOMDocument;
xd: IXMLDOMNode;

// die Sachen hier vor habe ich aus Platzgründen rausgelassen, überwiegend Kommentar und auskommentiertes

    fnNew:=('c:\Scan.xml');
    u:=GetXMLDocument(WebBrowser1.Document);
    xd:=u.selectSingleNode('/root/data');
    xdNew.ComsDOMDocument.Create; // hier Fehlermeldung : [Fehler] Unit2.pas(125): E2003 Undefinierter Bezeichner: 'ComsDOMDocument'

    xdNew.documentElement:= xd.cloneNode(True) as IXMLDOMElement;
    xdNew.save(fnNew);
Ist wahrscheinlich etwas was euch ins Auge springt und bei mir abprallt.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#23

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 2. Mär 2008, 17:09
Vergleiche mal:

Delphi-Quellcode:
xdNew := CoDomDocument.Create; // mein Code

xdNew.ComsDOMDocument.Create; // hier Fehlermeldung
Hast du dich da vertippt?
  Mit Zitat antworten Zitat
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#24

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 2. Mär 2008, 17:52
Äh Hi,

Zitat:
Ist wahrscheinlich etwas was euch ins Auge springt und bei mir abprallt.

Entschuldige, von Blindheit geschlagen, aber ein Beweis fürs nicht einfach nur kopieren .

Darf ich noch Fragen, wie ich jetzt weitere Daten in der Datei anhänge, also in dieselbe Datei reinschreibe. So in der Art Append bei Stringbehandlung ?

Und dann sollte es das gewesen sein.

Vielen Dank.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#25

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 2. Mär 2008, 18:07
Eine gut überlegte Frage beinhaltet meist schon die Lösung.

Deine Frage lässt viel offen, aber wenn ich unterstellen darf, dass du aus mehreren gleichartigen XML-Dokumenten die Lehrgänge extrahieren und in einem einzigen Dokument kumulieren möchtest, dann kennst du ja schon eine Lösung zum Extrahieren. Hinzufügen kannst du dann mittels einer Iteration über die einzelnen Lehrgänge und der Methode appendChild.

Magst du es selbst mal probieren?
  Mit Zitat antworten Zitat
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#26

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 2. Mär 2008, 21:14
Hi,

also ich habe das jetzt mal versucht umzusetzen und habe folgenden Code geschrieben

Delphi-Quellcode:
if FileExists (fnNew) then // Prüfung ob File vorhanden
    begin
      xdNew.loadXML(fnNew); // File laden
      xdNew.appendChild(xd); // Neue daten anfügen
      xdNew.save(fnNew); // File wieder speichern
    end
    else
    begin
      xdNew.documentElement:= xd.cloneNode(True) as IXMLDOMElement; // Neues Eelemt in neuer File
      xdNew.save(fnNew); // File speichern
    end;
Das projekt kompiliert und läuft ohne Fehler durch, allerdings wird immer nur das letzte Element in der Datei gespeichert, egal ob sie neu erstellt oder geladen wurde.

Kann es sein dass  xdNew.appendChild(xd); nicht ganz stimmt?
Habe es auch schon mit xdNew.documentElement.appendChild(xd); versucht, dass gab aber eine Zugriffsverletzung.

Gruß
Hoschie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#27

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 2. Mär 2008, 21:27
xdNew.appendChild(xd) ist ganz sicher falsch.

Du willst die childNodes von xd.documentElement hinter den childNodes von xdNew.documentElement einfügen - und zwar in einer Schleife.

Mach mal, während ich ein Bad nehme.
  Mit Zitat antworten Zitat
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#28

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 2. Mär 2008, 21:49
Hmmm,

aber ich habe in der Variablen xd
xd:=u.selectSingleNode('/root/data/Lehrgang'); schon das Element Lehrgang drin (oder?). Das will ich jetzt nur noch anhängen. Die Zieldatei sieht im Moment so aus
Delphi-Quellcode:
<root>
  <data>
    <Lehrgang></Lehrgang> // hier sollen die anderen angehängt werden.
  </data>
</root>
Aber jetzt bade mal in Ruhe, dass hast du dir verdient
Für mich ist wohl jetzt auch erstmal Feierabend, meine Frau schaut schon so merkwürdig.

Gruß
Hoschie
  Mit Zitat antworten Zitat
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#29

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 3. Mär 2008, 21:20
Moin Moin,

ich habs rausgefunden. Und geholfen hat mir dabei zusätzlich zu marabus sehr guten Anregungen ein wiederholtes, intensives Lesen, des XML-Tutorials.

Mein Code:
Delphi-Quellcode:
try
    fnNew:=('c:\Scan.xml'); // Datei zum speichern
    u:=GetXMLDocument(WebBrowser1.Document); // XML Quelle
    xd:=u.selectSingleNode('/root/data/Lehrgang'); // Benötigtes Element
    xdNode:=xd.cloneNode(True) as IXMLDOMElement;; // wichtig !!
    xdNew:= ComsDOMDocument.Create;

    if not FileExists (fnNew) then // erstellen File
    begin
      xdNew.loadXML('<?xml version="1.0"?><root></root>');
      xdNew.documentElement.appendChild(xdNode); // hier hakte es
      xdNew.save(fnNew);
    end
    else
    begin
      xdNew.load(fnNew);
      xdNew.documentElement.appendChild(xdNode); // an bestehende Datei anhängen
      xdNew.save(fnNew);
    end;
  except
  if FileExists('C:\Log.txt') then / LogFile zur Sicherheit
    begin
    AssignFile(log, 'C:\Log.txt');
    Append(log);
    Write(log,(Edit1.Text+chr(13)+chr(10)));
    CloseFile(log);
    end
  else
    begin
    AssignFile(log, 'C:\Log.txt');
    ReWrite(log);
    Write(log,(Edit1.Text+chr(13)+chr(10)));
    CloseFile(log);
    end;
  end;
Damit läuft es schon mal so, wie es soll. Jetzt werde ich da mal ein paar Testläufe mit machen um zu sehen wie es mit der Speicherverwaltung ist. Ich weiss noch nicht so recht, ob ich nicht noch irgendwas wieder freigeben muss.

Gruß
Hoschie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#30

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 4. Mär 2008, 19:50
Hallo Hoschie,

Glückwunsch zur deiner eigenen Leistung. Steckt da in jedem Dokument immer nur ein Lehrgang?

Hier noch ein paar versteckte Anregungen:

Delphi-Quellcode:
const
  FN_LOG = 'log.txt';
  XML_TEMPLATE = '<?xml version="1.0"?><root></root>';

procedure WriteLog(const msg: string);
var
  log: TextFile;
begin
  AssignFile(log, FN_LOG);
  if FileExists(FN_LOG)
    then Append(log)
    else Rewrite(log);
  WriteLn(log, DateTimeToStr(Now), #9, msg);
  CloseFile(log);
end;

function LoadXml(xd: IXMLDOMDocument; const fn: TFileName): Boolean;
begin
  if FileExists(fn)
    then Result := xd.load(fn)
    else Result := xd.loadXML(XML_TEMPLATE);
end;


// ...
begin
  // ...
  if LoadXml(xdNew, fnNew) then
  begin
    xdNew.documentElement.appendChild(xdNode);
    xdNew.save(fnNew);
  end else Log(Edit1.Text);
  // ...
end;
Getippt und nicht getestet.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


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 11:16 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