Mahlzeit,
für meine aktuelle Aufgabenstellung muss ich aus einer Schnittstelle XML-Daten einlesen und verarbeiten.
Ich würde nun die Daten gerne gegen ein Schema validieren. Das Schema liegt nicht als Datei vor, sondern als Konstante im Code.
MSXML kann ja sowas, also habe ich mir eine entsprechende Funktion gebastelt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure ValidateXML(const DocXML: String; const SchemaXML: String; const SchemaNS: WideString); var MsxmlDoc: IXMLDOMDocument2; SchemaCache: IXMLDOMSchemaCollection; Error: IXMLDOMParseError; Schema : IXMLDOMDocument2; begin MSXMLDoc := CoDOMDocument.Create; Schema := CoDOMDocument.Create; MsXMLDoc.loadXML(DocXML); Schema.loadXML(SchemaXML); SchemaCache := CoXMLSchemaCache.Create; SchemaCache.add(SchemaNS, Schema); <--- Fehler MsxmlDoc.schemas := SchemaCache; Error := MsxmlDoc.validate; MSXMLDoc := nil; Schema := nil; if Error.errorCode <> S_OK then raise EValidateXMLError.Create(Error.reason); end; |
Bei der markierten Zeile meckert ein EOLEExcpetion "ungültige Definition für das Stammelement im Schema".
Wenn ich Schema und Daten in Dateien speichere und die mittels XMLSpy validiere, klappt alles.
Hier ein kurzer Auszug aus dem Schema:
XML-Daten
1: 2: 3: 4: 5:
| <?xml version="1.0" encoding="ISO-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:simpleType name="enum_form_type"> ... </xs:schema> |
Als SchemaNS übergebe ich
xmlns:xs="http:
Any ideas?
Bravery calls my name in the sound of the wind in the night...