1

我正在验证 Xdocument 和 xsd 文件,一切正常,但是当我将 Xsd 文件添加到 XmlSchemaSet 对象时,加载大约需要一分半钟,架构并不小,但只占用 50kb,在我看来应该不需要那么多加载。我尝试过使用其他较小的 xsd 文件并在 1 毫秒内加载。也尝试作为具有相同结果的嵌入资源。我有什么问题吗,或者有没有办法以某种方式将 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
4

2 回答 2

0

问题如前所述,只是使用以下代码添加了一个 XmlPreloadedResolver,如果有多个 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");
于 2020-04-03T01:02:30.393 回答
0

模式从 W3C 网站导入模式文档

http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd

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

于 2020-04-02T07:11:12.333 回答