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?