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?
答案 0 :(得分:1)
这不是XSD / XML问题,而是如何使用 MSXML 的问题:
见PRB:Mixing Different Versions of MSXML DOM Objects Is Not Recommended
原因
在DOM对象中混合使用不同版本的MSXML DOM对象时 方法调用,来自不同版本的解析器的对象 作为必需的方法参数提供被视为外来参数 对象
分辨率
引用和使用由单个版本的MSXML实现的对象 解析器。编程时不要混用不同版本的DOM对象 MSXML DOM。