AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi [MSXML + XSD-Validation] Welche MSXML Version?
Thema durchsuchen
Ansicht
Themen-Optionen

[MSXML + XSD-Validation] Welche MSXML Version?

Ein Thema von alzaimar · begonnen am 4. Jan 2010 · letzter Beitrag vom 5. Jan 2010
 
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: [MSXML + XSD-Validation] Welche MSXML Version?

  Alt 4. Jan 2010, 10:19
Naja die Frage ist halt wie elegant du das haben willst, also das simpelste wäre ja nu wenn du diese Funktion ( die ich irgendwo aus dem Forum habe ) nutzt und die MSXML-Version überprüfst:

Delphi-Quellcode:

function ExpandEnvStr(const sInput: string): string;
const
  MAXSIZE = 32768;
begin
  SetLength(Result,MAXSIZE);
  SetLength(Result,ExpandEnvironmentStrings(pchar(sInput),
    @Result[1],length(Result)));
end;

function DoesMSXMLExist(CLASS_DOMDocument:TGUID): boolean;
var
  reg : TRegistry;
  s : string;
begin
  Result := false;

  reg := TRegistry.Create(KEY_READ);
  if(reg <> nil) then
    with reg do try
      RootKey := HKEY_CLASSES_ROOT;

      if(OpenKey('CLSID\' + GuidToString(CLASS_DOMDocument) +
        '\InProcServer32',false)) then
      try
        s := ReadString('');
        Result := fileexists(ExpandEnvStr(s));
      finally
        CloseKey;
      end;
    finally
      Free;
    end;
end;

function CheckMSXML6:Boolean;
begin
  result:=DoesMSXMLExist(CLASS_DOMDocument60);
end;

function CheckMSXML4:Boolean;
begin
  result:=DoesMSXMLExist(CLASS_DOMDocument40);
end;

function CheckMSXML3:Boolean;
begin
  result:=DoesMSXMLExist(CLASS_DOMDocument30);
end;

function CheckMSXML2:Boolean;
begin
  result:=DoesMSXMLExist(CLASS_DOMDocument26);
end;
Für den Parser benutzte dann IXMLDOMDocument2, da kannste 4.0 oder 6.0 erstellen ( aber dann halt nur die 4.0er Funktionen nutzen).
Für die SchemaCollection benutzte dann IXMLDOMSchemaCollection2, da kannste dann entweder die 4.0 oder 6.0 Version erstellen.

Delphi-Quellcode:
function LoadMSDom(const FileName: WideString): IXMLDOMDocument2;
begin
  if CheckMSXML6 then
  begin
    Result := CoDOMDocument60.Create;
  end
  else if CheckMSXML4 then
  begin
    Result := CoDOMDocument40.Create;
  end
  else
    // ERROR oder so
  end;
  Result.async := False;
  Result.resolveExternals := True; //False;
  Result.validateOnParse := True;
  Result.load(FileName);
end;

{ Validate }

procedure InternalValidateXMLDoc(const Doc: IDOMDocument; const SchemaDoc: IXMLDOMDocument2; const SchemaNS: WideString);
var
  MsxmlDoc: IXMLDOMDocument2;
  SchemaCache: IXMLDOMSchemaCollection2;
  Error: IXMLDOMParseError;
begin
  MsxmlDoc := DOMToMSDom(Doc);
  if CheckMSXML6 then
  begin
    SchemaCache := CoXMLSchemaCache60.Create;
  end
  else if CheckMSXML4 then
  begin
    Result := CoXMLSchemaCache40.Create;
  end
  else
    // ERROR oder so
  end;
  SchemaCache.add(SchemaNS, SchemaDoc);
  MsxmlDoc.schemas := SchemaCache;
  Error := MsxmlDoc.validate;
  if Error.errorCode <> S_OK then
    raise EValidateXMLError.Create(Error.errorCode, Error.reason);
end;
Da du ja dann die Interfaces benutzt und beide Versionen mit denen kompatibel sind, sollte es dabei keine Probleme geben
Falls ich mich nicht irre ^_°

MfG Alaitoc
  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 03:57 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