![]() |
XMl-File Parsen: xmlDoc.load(sDateiname) schlägt fehl
Code:
function TForm1.parseXMLFile(sDateiname: OleVariant): Boolean;
var xmlDoc: IXMLDOMDocument2; node: IXMLDOMNode; nodes: IXMLDOMNodeList; i: Integer; sOleFilename: OleVariant; begin Result := FALSE; case XML_VERSION of 26: xmlDoc := CoDOMDocument26.Create; 30: xmlDoc := CoDOMDocument30.Create; 40: xmlDoc := CoDOMDocument40.Create; end; //xmlDoc.setProperty('NewParser', true); //--> ab 4.0 Version! xmlDoc.validateOnParse := False; xmlDoc.resolveExternals := False; xmlDoc.async := False; xmlDoc.preserveWhiteSpace := False; // prüfen ob XML-File vorhanden: if not xmlDoc.load(sDateiname) then begin MessageDlg('XML-Datei nicht vorhanden!', mtWarning, [mbOK], 0); exit; end; // prüfen ob XML-File "wohlgeformt" ist: If xmlDoc.parseerror.errorCode <> 0 then begin MessageDlg( 'XML-Datei ' + sDateiname + ' ist nicht wohlgeformt --> Abbruch', mtWarning, [mbOK], 0); Exit; end; try // Auflistung einer NodeListim Memo3: -------------------------------------- nodes := xmlDoc.documentElement.selectNodes('//Bewerbung[0]/*'); node := xmlDoc.selectSingleNode('//Bewerbung[0]/*'); for i:=0 to nodes.length-1 do begin if (node <> nil) then begin node := nodes.nextNode; Memo3.Lines.Add(node.Get_nodeName + #9 + node.Get_text); end; end; Memo3.Lines.Add('----------------------------------------'); Result := TRUE; except ; end; end; sDateiname ist auf jeden Fall vorhanden (C:\test.xml) Aufruf der Funktion erfolgt mit:
Code:
dabei ist sTempPath = 'C:\'
aFTPClient.LocalFileName := IncludeTrailingBackslash(sTempPath) + FileNameList[i];
den Dateinamen lese ich aus einer Datei aus die ich von einem FTP-Server (Ordnerauflistung aller Dateien) geladen habe ------------- ergänzt: eine überprüfung ob die datei existiert mit fileExists ist "TRUE" |
Re: XMl-File Parsen: xmlDoc.load(sDateiname) schlägt fehl
Und was passiert? Fehlermeldung?
Vielleicht solltest du If xmlDoc.parseerror.errorCode <> 0 then begin MessageDlg( 'XML-Datei ' + sDateiname + ' ist nicht wohlgeformt --> Abbruch', mtWarning, [mbOK], 0); Exit; end; bei dem not Load reinmachen. |
Re: XMl-File Parsen: xmlDoc.load(sDateiname) schlägt fehl
jepp. die datei war nicht wohlgeformt *grummel*
vielen dank! |
Re: XMl-File Parsen: xmlDoc.load(sDateiname) schlägt fehl
so... habe jetzt den code weiter optimiert und eine umfassende überprüfung des Fehlers (Ausgabe im MessageDlg) eingebaut:
Code:
function TForm1.parseXMLFile(sDateiname: OleVariant): Boolean;
var xmlDoc: IXMLDOMDocument2; node: IXMLDOMNode; nodes: IXMLDOMNodeList; i: Integer; begin Result := FALSE; case XML_VERSION of 26: xmlDoc := CoDOMDocument26.Create; 30: xmlDoc := CoDOMDocument30.Create; 40: xmlDoc := CoDOMDocument40.Create; end; //xmlDoc.setProperty('NewParser', true); //--> ab 4.0 Version! xmlDoc.validateOnParse := False; xmlDoc.resolveExternals := False; xmlDoc.async := FALSE; xmlDoc.preserveWhiteSpace := False; // prüfen ob XML-File vorhanden: if not xmlDoc.load(sDateiname) then begin // prüfen ob XML-File "wohlgeformt" ist: If xmlDoc.parseerror.errorCode <> 0 then begin MessageDlg( Format('XML-Datei %s ist nicht wohlgeformt --> Abbruch'+#13#10#+#13#10+ 'Code: ' + #9 + ' %d' + #13#10 + 'Reason: ' + #9 + ' %s' + #13#10 + 'URL: ' + #9#9 + ' %s' + #13#10 + 'SrcText: ' + #9 + ' %s' + #13#10 + 'Line: ' + #9#9 + ' %d' + #13#10 + 'LinePos: ' + #9 + ' %d' + #13#10 + 'FilePos: ' + #9 + ' %d' + #13#10, [sDateiname, xmlDoc.parseerror.Get_errorCode, xmlDoc.parseerror.Get_reason(), xmlDoc.parseerror.Get_url, xmlDoc.parseerror.Get_srcText, xmlDoc.parseerror.Get_line, xmlDoc.parseerror.Get_linepos, xmlDoc.parseerror.Get_filepos]), mtWarning, [mbOK], 0); Exit; end else begin AddToMemo('XML-Datei nicht vorhanden!'); exit; end; end else AddToMemo('XML-Datei erfolgreich geladen!'); try // Auflistung einer NodeListim Memo3: -------------------------------------- nodes := xmlDoc.documentElement.selectNodes('//Bewerbung[0]/*'); node := xmlDoc.selectSingleNode('//Bewerbung[0]/*'); for i:=0 to nodes.length-1 do begin if (node <> nil) then begin node := nodes.nextNode; Memo3.Lines.Add(node.Get_nodeName + #9 + node.Get_text); end; end; Memo3.Lines.Add('----------------------------------------'); Result := TRUE; except ; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz