Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi XMl-File Parsen: xmlDoc.load(sDateiname) schlägt fehl (https://www.delphipraxis.net/35573-xml-file-parsen-xmldoc-load-sdateiname-schlaegt-fehl.html)

semo 9. Dez 2004 09:35


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:
aFTPClient.LocalFileName := IncludeTrailingBackslash(sTempPath) + FileNameList[i];
dabei ist sTempPath = 'C:\'
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"

jim_raynor 9. Dez 2004 09:59

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.

semo 9. Dez 2004 10:05

Re: XMl-File Parsen: xmlDoc.load(sDateiname) schlägt fehl
 
jepp. die datei war nicht wohlgeformt *grummel*

vielen dank!

semo 9. Dez 2004 10:46

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 06:31 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