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
 
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

[MSXML + XSD-Validation] Welche MSXML Version?

  Alt 4. Jan 2010, 10:04
Hallo,

Ich habe hier gerade ein kleines Problem: Eine Anwendung, die sowohl under XP-Embedded als auch unter Vista laufen soll, muss XML-Dateien per XSD validieren. Ich habe dazu die Unit XMLValidate.PAS von CodeGear/Embarcadero geladen, die ihrerseits MSXML 4.0 voraussetzt. Die Anwendung war zunächst für XP-embedded konzipiert. Bei der vorliegenden Installation ist MSXML 4.0 installiert und die Anwendung funktioniert tadellos.

Die gleiche Anwendung funktioniert jedoch nicht mit Vista:
Zitat von Die Anwendung, gestartet unter Vista,:
Class not registered, ClassID: {88D969C2-F192-11D4-A65F-0040963251E5}
Die GUID gehört zum Interface 'XMLSchemaCache40'. Offensichtlich ist MSXML 4.0 nicht installiert.

Frage: Soll ich wirklich extra dafür MSXML 4.0 nachträglich unter Vista installieren, oder geht das nicht auch anders ("Wenn MSXML 6.0 nimm diese Version, sonst die 4.0er"). Die Funktionalität selbst ist ja in 6.0 drin, denke ich mir, nur die GUIDs sind anders.

Der relevante Teil aus XMLValidate.Pas ist:

Delphi-Quellcode:
function LoadMSDom(const FileName: WideString): IXMLDOMDocument2;
begin
  Result := CoDOMDocument40.Create; // <-------
  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: IXMLDOMSchemaCollection;
  Error: IXMLDOMParseError;
begin
  MsxmlDoc := DOMToMSDom(Doc);
  SchemaCache := CoXMLSchemaCache40.Create; // <<--------
  SchemaCache.add(SchemaNS, SchemaDoc);
  MsxmlDoc.schemas := SchemaCache;
  Error := MsxmlDoc.validate;
  if Error.errorCode <> S_OK then
    raise EValidateXMLError.Create(Error.errorCode, Error.reason);
end;
Ich müsste also zur Laufzeit irgendwie entscheiden, ob ich MSXML 4.0 oder 6.0 verwenden soll (das würde über eine einfache Prüfung gehen). Die Frage ist: WIE kann ich die *Verwendung* von V4.0 bzw. V6.0 transparent und elegant implementieren?
Oder sollte ich doch einfach MSXML4.0 nachrüsten?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 11:52 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