uses
winapi.msxml,
Xml.XMLIntf,
XML.XMLDoc,
XML.XMLDOM;
function Validate_XML(xmlFile:
String):boolean;
var
I : Integer;
ValidateDoc : IXMLDomDocument2;
ValidateDocRoot : IXMLDomNode;
ValidationError1 : IXMLDOMParseError2;
ValidationError2 : IXMLDOMParseError2;
ValidationErrors : IXMLDOMParseErrorCollection;
Errorlist : TSTringlist;
begin
// Erster Parse Durchlauf ob die XML Datei STRUKTURFEHLER aufweist
Validatedoc := CoDOMDocument60.Create;
Validatedoc.load(xmlfile);
Validatedoc.validateOnParse := true;
try
ValidateDoc.Async := False;
ValidateDoc.validateOnParse := True;
Result := (ValidateDoc.Load(xmlFile))
and (ValidateDoc.parseError.errorCode = 0);
if not Result
then
begin
{... Fehlermeldung mit parseerror.properties zur Beschreibung...}
ValidateDoc :=
nil;
exit;
end;
finally
ValidateDoc :=
nil;
end;
// Zweiter Parse Durchlauf ob die XML/XSD Fehler aufweist
Validatedoc := CoDOMDocument60.Create;
Validatedoc.load(xmlfile);
Validatedoc.validateOnParse := true;
Validatedoc.resolveExternals:=true;
Validatedoc.setProperty('
MultipleErrorMessages','
true');
ValidationError1 := Validatedoc.validate
as IXMLDOMParseError2;
ValidationErrors := ValidationError1.allErrors;
if ValidationErrors.length > 0
then
begin
Errorlist:= TStringlist.Create;
For I:= 0
to ValidationErrors.length -1
do
begin
ValidationError2:= ValidationErrors.item[I]
as IXMLDOMParseError2;
ErrorList.Add(#9 + ValidationError2.errorXPath);
end;
{... Fehlermeldung mit Angaben zur Fehlerlistenausgabe...}
Errorlist.SaveToFile(XMLPath + ExtractFilename(xmlFile) + '
.err');
Result := false;
exit;
end;
Result := true;
end;