Einzelnen Beitrag anzeigen

Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#4

Re: XMl-File Parsen: xmlDoc.load(sDateiname) schlägt fehl

  Alt 9. Dez 2004, 11:46
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;
  Mit Zitat antworten Zitat