AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alternative zum MSXML

Ein Thema von philwo · begonnen am 18. Apr 2004 · letzter Beitrag vom 1. Jun 2004
 
MathiasSimmack
(Gast)

n/a Beiträge
 
#15

Re: Alternative zum MSXML

  Alt 1. Jun 2004, 09:43
Zitat von Fellmer Lloyd:
"Non-validating XML parser"
-Bringt das DTD denn noch was?
Äh, ich kann zwar jetzt nur für MS-XML sprechen, aber der dortige Validator ist ja gleich eingebaut und kostet dich im Prinzip ein Lächeln. Wenn deine XML-Datei eine DTD benutzt, dann reicht bspw. folgendes:
Delphi-Quellcode:
  Memo1.Clear;

  xmldoc.load(FileListBox1.Items[FileListBox1.ItemIndex]);

  if(xmldoc.parseError.errorCode <> 0) then
  begin
    Memo1.Lines.LoadFromFile(
      FileListBox1.Items[FileListBox1.ItemIndex]
    );

    MessageDlg(Format('%s in Zeile %d, Position %d' + #13#10 + '%s',
      [xmldoc.parseError.reason,xmldoc.parseError.line,
       xmldoc.parseError.linepos,xmldoc.parseError.srcText]),
      mtError,[mbOk],0);
  end
  else
  begin
    Memo1.Lines.Text := xmldoc.xml;
    MessageDlg('Alles okay',mtInformation,[mbOk],0);
  end;
um Fehler zu finden.

Wenn dein XML-Dokument keine DTD benutzt, bzw. wenn es nicht deins ist, du es aber dennoch gern prüfen würdest, dann geht das bspw. mit einer externen XSD-Datei. Hier ein etwas größerer Auszug:
Delphi-Quellcode:
  // create XSD schema
  xsd := CoXMLSchemaCache40.Create;
  if(xsd = nil) then
  begin
    MessageBox(self.Handle,
      pchar(NOXMLPARSER),
      nil,
      MB_OK or MB_ICONEXCLAMATION);

    fErrorExit := true;
    Application.Terminate;
    exit;
  end;
  xsd.add('',ExtractFilePath(paramstr(0)) + 'MO.xsd');

  // try to create a XML parser
  xmldoc := CoDOMDocument40.Create;

  xmldoc.async := false;
  xmldoc.resolveExternals := true;
  xmldoc.validateOnParse := true;

  // XSD-Schema zuweisen
  xmldoc.schemas := xsd;

  xmldoc.load(fSavePath + '\' + DATABASE_FNAME);

  // errors while loading, uh-oh, ... :o(
  if(xmldoc.parseError.errorCode <> 0) then
  begin
    if(MessageBox(self.Handle,pchar(
      Format(XMLDATABASEERROR,[xmldoc.parseError.reason,
        xmldoc.parseError.errorCode,xmldoc.parseError.line,
        xmldoc.parseError.linepos,xmldoc.parseError.srcText])),
      nil,
      MB_YESNO or MB_ICONQUESTION) = IDNO) then
    begin
      fErrorExit := true;
      Application.Terminate;
      exit;
    end;

    xmldoc.loadXML('<?xml version="1.0"?><' + mainnode + '/>')
  end;
Der Rest läuft dann wieder wie gehabt: Sind Fehler drin, werden die angezeigt.

Ansonsten müsstest du noch mal fragen, wenn du speziell etwas zum Thema Validieren wissen willst.
  Mit Zitat antworten Zitat
 


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 09:53 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