Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: TXMLDocument kann nicht created werden

  Alt 24. Okt 2024, 15:25
Hallo himitsu,

vielen Dank für die guten Anregungen!

Zitat:
PS, bissl Kürzer wäre ReplaceStr, bzw, ReplaceText(XMLDcmnt.FileName, '.zip', '.xml') , aber eigentlich nutzt man doch ein ChangeFileExt(xmlPfad, '.xml') ?
Den Befehl kannte ich nicht - habe ich gerne übernommen.

Zitat:
Das ergibt immer False ... wolltes du vielleicht ein Except?
Stimmt, war ein Fehler!

Zitat:
Und wenn ja, dann schäm dich.
Fehlermeldungen blind wegzuwerfen und in garnichts oder nur einen Boolean zu konvertieren ... sowas gehört sich nicht.
* ordentiche Fehlermeldung
* oder wenigestens in ein Log schreiben
Ganz schön streng - finde ich aber gut, nur dann wird man besser!


Zitat:
Was machst du denn außerhalb, bei einem False?
Nur wenn ein True zurückgeliefert wird, wird die ursprüngliche Datei gelöscht. Der Benutzer sieht in drei FileListBoxes wie die Dateien bearbeitet und verschoben werden. In der FileListBox mit den ursprünglichen Download-Dateien soll am Ende nichts mehr drinstehen.

So sieht der ganze Ablauf aus jetzt aus:
Delphi-Quellcode:
procedure TFrm_BD_DHL.btn_ExtractDataClick(Sender: TObject);
var Logic: TLogic;
      FList: TStringList;
      I: integer;
      EditResult: boolean;
begin
   Logic:= TLogic.Create;
   FList:= TStringList.Create;
   Try
      //Erst nur die ZIP-Files mit den PDF-Files
      Logic.GetAllFilesEM(edt_DownloadPath.Text, 'zip', FList, false);
      for I := 0 to FList.Count -1 do begin
         EditResult:= EditMoveWmDFiles(FList[I], edt_PDFPath.Text, edt_XMLPath.Text);
         if EditResult then begin
            DeleteFile(FList[I]);
         end;
         FlLstbx_Download.Update;
         FlLstbx_PDF.Update;
         FlLstbx_XML.Update;
      end;
      //Zum Schluss die XML-Files, damit sie nicht vor dem Ablegen der PDF-Files verarbeitet werden
      FList.Clear;
      Logic.GetAllFilesEM(edt_DownloadPath.Text, 'xml', FList, false);
      for I := 0 to FList.Count -1 do begin
         EditResult:= EditMoveWmDFiles(FList[I], edt_PDFPath.Text, edt_XMLPath.Text);
         if EditResult then begin
            DeleteFile(FList[I]);
         end;
         FlLstbx_Download.Update;
         FlLstbx_PDF.Update;
         FlLstbx_XML.Update;
      end;
   Finally
      Logic.Free;
      FList.Free;
   End;
end;

function TFrm_BD_DHL.EditMoveWmDFiles(FilePath, PDFPath, XMLPath: string): boolean;
var Logic: TLogic;
begin
   Try
      Logic:= TLogic.Create;
      Try
         if LowerCase(ExtractFileExt(FilePath)) = '.zipthen begin
            Result:= Logic.ExctractZIP(FilePath, PDFPath);
         end;
         if LowerCase(ExtractFileExt(FilePath)) = '.xmlthen begin
            Result:= Logic.XMLEdit(FilePath, XMLPath);
         end;
      Finally
         Logic.Free;
      End;
   Except
      Result:= false;
   End;
end;


function TLogic.ExctractZIP(ZipPfad, ExtractPfad: string): boolean;
var ZFile: TZipFile;
begin
   Try
      ZFile:= TZipFile.Create;
      Try
         ZFile.Open(ZipPfad, zmRead);
         ZFile.ExtractAll(ExtractPfad);
         Result:= true;
      Finally
         ZFile.Free;
      End;
   Except
      Result:= false;
   End;
end;


function TLogic.XMLEdit(xmlPfad: string; TargetPfad: string): Boolean;
var WmDKntn: IXMLNode;
      XMLDcmnt: IXMLDocument;
      NwVlDateien, NwVlWF_Name, NwFlNm: string;
begin
   Try
      if TargetPfad[Length(TargetPfad)] <> '\then begin
         TargetPfad:= TargetPfad + '\';
      end;
      XMLDcmnt:= LoadXMLDocument(xmlPfad);
      NwFlNm:= ChangeFileExt(ExtractFileName(xmlPfad), '.xml');
      WmDKntn:= XMLDcmnt.DocumentElement;
      NwVlDateien:= StringReplace(WmDKntn.ChildNodes.FindNode('Dateien').ChildNodes.FindNode('Dateiname').NodeValue, '.zip','.xml',[rfIgnoreCase, rfReplaceAll]);
      NwVlWF_Name:= StringReplace(WmDKntn.ChildNodes.FindNode('WF_Name').ChildNodes.FindNode('WF_Name').NodeValue, '.zip','.xml',[rfIgnoreCase, rfReplaceAll]);
      WmDKntn.ChildNodes.FindNode('Dateien').ChildNodes.FindNode('Dateiname').NodeValue:= NwVlDateien;
      WmDKntn.ChildNodes.FindNode('WF_Name').ChildNodes.FindNode('WF_Name').NodeValue:= NwVlWF_Name;
      XMLDcmnt.SaveToFile(TargetPfad + NwVlDateien);
      Result:= true;
   Except
      MessageDlg('Die Datei ' + xmlPfad + ' konnte nicht editiert werden. Bitte manuell eingreifen und den Administrator informieren.', mtError, [mbOK], 0);
      Result:= false;
   End;
end;
Vielen Dank
Patrick
Patrick

Geändert von Ykcim (24. Okt 2024 um 17:35 Uhr)
  Mit Zitat antworten Zitat