Конференция "Corba" » Проверка xml по схеме xsd [Delphi, Windows]
 
  • 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]
    Спасибо. Вроде разобрался.
 
Конференция "Corba" » Проверка xml по схеме xsd [Delphi, Windows]
Есть новые Нет новых   [118639   +41][b:0][p:0.001]