我正在验证和Xdocument到xsd文件,一切正常,但是当我将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发布于 2020-04-02 15:11:12
该架构从位于的W3C网站导入架构文档
http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd
W3C积极地阻止您对此类资源进行操作访问,因为它们无法处理流量;因此,它们会人为地对请求施加30秒的延迟。您需要创建此资源的本地副本,并通过更改schemaLocation或使用某种解析器重定向请求来调整验证以获取本地副本。
发布于 2020-04-03 09:02:30
问题如前所述,只需使用以下代码添加一个XmlPreloadedResolver,如果有多个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");https://stackoverflow.com/questions/60981884
复制相似问题