-
Alex_Y (21.10.09 05:47) [0]Здравствуйте.
Перерыл весь инет, не могу найти нормального решения.
Подскажите как правильно сделать.
Делаю как нашел в инете:
procedure TfmXML.Button1Click(Sender: TObject);
var
S, D: Variant;
SS, Sxml: OLEVariant;
begin
SS:= 'STD_MP.xsd';
Sxml:= '1.xml';
D := CreateOleObject('Msxml2.DOMDocument.4.0');
S := CreateOleObject('Msxml2.XMLSchemaCache.4.0');
D.async := false;
D.resolveExternals := false;
D.validateOnParse := false;
S.Add('x:std_mp', SS);
D.schemas := S;
D.ValidateOnParse:= true;
D.Load(Sxml);
if D.ParseError.ErrorCode <> 0 then
ShowMessage(D.ParseError.reason)
else
ShowMessage('ok!!!');
end;
в итоге, результат всегда "ок!!!", независимо от xml и схемы.
Заранее спасибо. -
Игорь Шевченко © (21.10.09 11:38) [1]
> D.resolveExternals := false;
Убрать не пробовал ? -
Alex_Y (21.10.09 12:06) [2]пробовал
-
Игорь Шевченко © (21.10.09 12:15) [3]Как делаю я:
function DOMCheckByXSD(XML:IXMLDOMDocument2; const XsdDoc:String; var ErrMsg:String):boolean;
Var
SchCache:IXMLDOMSchemaCollection;
aXML:IXMLDOMDocument2;
Path:OleVariant;
begin
Path := XsdDoc;
SchCache := CoXMLSchemaCache40.Create;
SchCache.add('',Path);
aXML := CoDOMDocument40.Create;
aXML.Schemas := SchCache;
aXML.Async := False;
aXML.ValidateOnParse := True;
aXML.SetProperty('NewParser', True);
aXML.loadXML(XML.xml);
Result := aXML.parseError.errorCode = 0;
if not Result then
with aXML.ParseError do
ErrMsg := Format(EM_PARSE_ERROR, [ErrorCode, Line, LinePos, Reason]);
end; -
Alex_Y (21.10.09 19:08) [4]Спасибо. Вроде разобрался.