错误:混合来自不同版本的MSXML的对象是错误的

时间:2016-09-06 04:21:24

标签: xml delphi xsd delphi-xe2

  private
    FSchemaFileName: string;
    FXmlFileName: string;
  end;

uses
  XMLDoc, XMLIntf, XMLValidate;

resourcestring
  RsValidateOk = 'Document validated without errors.';

{$R *.dfm}

procedure TMainForm.FormShow(Sender: TObject);
begin
  FontEdit1Accept(nil);
end;

procedure TMainForm.XmlFileOpen1BeforeExecute(Sender: TObject);
begin
  XmlFileOpen1.Dialog.FileName := '';
end;

procedure TMainForm.SchemaFileOpen1BeforeExecute(Sender: TObject);
begin
  SchemaFileOpen1.Dialog.FileName := '';
end;

procedure TMainForm.XmlFileOpen1Accept(Sender: TObject);
begin
  FXmlFileName := XmlFileOpen1.Dialog.FileName;
  XmlFileEdit.Lines.LoadFromFile(FXmlFileName);
  PageControl.ActivePageIndex := 0;
end;

procedure TMainForm.SchemaFileOpen1Accept(Sender: TObject);
begin
  FSchemaFileName := SchemaFileOpen1.Dialog.FileName;
  SchemaEdit.Lines.LoadFromFile(FSchemaFileName);
  PageControl.ActivePageIndex := 1;
end;

procedure TMainForm.FontEdit1Accept(Sender: TObject);
begin
  XmlFileEdit.Font := FontEdit1.Dialog.Font;
  SchemaEdit.Font := FontEdit1.Dialog.Font;
end;

procedure TMainForm.FormatXmlAction1Update(Sender: TObject);
begin
  FormatXmlAction1.Enabled := ActiveControl is TRichEdit;
end;

procedure TMainForm.FormatXmlAction1Execute(Sender: TObject);
begin
  with ActiveControl as TRichEdit do
    Lines.Text := FormatXMLData(Lines.Text);
end;

procedure TMainForm.ValidateContent1Execute(Sender: TObject);
var
  Doc: IXMLDocument;
begin
  Doc := LoadXMLData(XmlFileEdit.Lines.Text);
  ValidateXMLDoc(Doc, FSchemaFileName, '');
  Application.MessageBox(PChar(RsValidateOk), PChar(Caption), MB_OK or MB_ICONINFORMATION);
end;

procedure TMainForm.ValidateContent1Update(Sender: TObject);
begin
  ValidateContent1.Enabled := (XmlFileEdit.GetTextLen > 0) and FileExists(FSchemaFileName);
end;

在“ MsxmlDoc.schemas:= SchemaCache; ”上给我“混合来自不同版本的MSXML的对象”是错误的 可以在Embarcadero http://cc.embarcadero.com/Item/19688

下载动态代码

这是我使用https://www.swedbank.lt/files/PDF/Swedbank_e-invoice_lt_1.1.xsd的XSD,这是我用来测试https://msdn.microsoft.com/en-us/library/ms762271(v=vs.85).aspx

的XML

如何针对XSD验证XML?

1 个答案:

答案 0 :(得分:1)

这不是XSD / XML问题,而是如何使用 MSXML 的问题:

见PRB:Mixing Different Versions of MSXML DOM Objects Is Not Recommended

  

原因

     

在DOM对象中混合使用不同版本的MSXML DOM对象时   方法调用,来自不同版本的解析器的对象   作为必需的方法参数提供被视为外来参数   对象

     

分辨率

     

引用和使用由单个版本的MSXML实现的对象   解析器。编程时不要混用不同版本的DOM对象   MSXML DOM。