XmlSchemaSet添加xsd文件以验证Xdocument花费的时间太长,超过一分钟

XmlSchemaSet添加xsd文件以验证Xdocument花费的时间太长,超过一分钟,xml,xsd,xmlschemaset,Xml,Xsd,Xmlschemaset,我正在对和xsd文件进行验证和Xdocument,一切正常,但当我将xsd文件添加到XmlSchemaSet对象时,加载大约需要一分钟半的时间,模式并不小,但只占用50kb,在我看来,加载不会占用那么多时间。我尝试过使用其他较小的xsd文件,并在1ms内加载。也尝试作为一个嵌入资源,具有相同的结果。如果我有什么问题,或者有没有办法让Xmlschemaset以某种方式作为一个类加载,这样它就不会每次都加载,任何帮助都将不胜感激 这是密码 XmlSchemaSet schemaSet = new

我正在对和xsd文件进行验证和Xdocument,一切正常,但当我将xsd文件添加到XmlSchemaSet对象时,加载大约需要一分钟半的时间,模式并不小,但只占用50kb,在我看来,加载不会占用那么多时间。我尝试过使用其他较小的xsd文件,并在1ms内加载。也尝试作为一个嵌入资源,具有相同的结果。如果我有什么问题,或者有没有办法让Xmlschemaset以某种方式作为一个类加载,这样它就不会每次都加载,任何帮助都将不胜感激

这是密码

 XmlSchemaSet schemaSet = new XmlSchemaSet();
 schemaSet.Add(null, "c:\\temp\\GT_Documento-0.2.0.xsd");
 XDocument xml = XDocument.Load("c:\\temp\\xmlinvoice.xml");
 xml.Validate(schemaSet, ValidationCallback); 
Xsd链接:

https://github.com/fel-sat-gob-gt/cat/blob/desa/xsd/GT_Documento-0.2.0.xsd

该模式从W3C网站导入一个模式文档,网址为


W3C积极劝阻您对此类资源进行操作访问,因为它们无法处理流量;因此,他们对请求施加了30秒的人为延迟。您需要创建此资源的本地副本,并调整验证以获取本地副本,方法是更改schemaLocation,或使用某种解析程序重定向请求。

该架构从W3C网站导入一个位于的架构文档


W3C积极劝阻您对此类资源进行操作访问,因为它们无法处理流量;因此,他们对请求施加了30秒的人为延迟。您需要创建此资源的本地副本,并通过更改schemaLocation或使用某种解析程序重定向请求来调整验证以获取本地副本。

问题如前所述,只需使用以下代码添加一个XmlPrepreadedResolver,如果需要添加多个xsd,则需要添加所有xsd

var resolver = new XmlPreloadedResolver();
resolver.Add(new Uri("http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core- 
schema.xsd"), File.ReadAllBytes(@"c:\temp\xmldsig.xsd"));
schemaSet.XmlResolver = resolver;
schemaSet.Add(null, "http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd");

问题如前所述,只是使用以下代码添加了一个XmlPrepreadedResolver,如果需要添加多个xsd,则需要添加所有xsd

var resolver = new XmlPreloadedResolver();
resolver.Add(new Uri("http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core- 
schema.xsd"), File.ReadAllBytes(@"c:\temp\xmldsig.xsd"));
schemaSet.XmlResolver = resolver;
schemaSet.Add(null, "http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd");