繁体   English   中英

无法针对C#中的多个xsd模式进行验证

[英]Cannot validate against multiple xsd schemas in C#

我想对照其架构定义验证经过数字签名的xml,而该架构实际上包含此标记

<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd" id="schema"/>

然后,我尝试加载架构:

XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, "a.xsd");
settings.Schemas.Compile();

我将收到以下错误:未声明' http://www.w3.org/2000/09/xmldsig#:Signature '元素。

您还需要在导入的架构中加载另一个

settings.Schemas.Add( [importednamespace][pathtoimportedXSD] );

出于安全原因,方案xmldsig-core-schema.xsd不收费,因为它引用DTD来验证上传目录并将其添加为另一方案。

<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd"

这有效的解决方案是C#

XElement xsdMarkup = XElement.Load("C:\\Proyectos\\WindowService\\Sbif\\Schema\\Schema\\IndicadoresFinancieros-v1.0.xsd");

XElement xsdMarkup2 = XElement.Load("http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd");

XmlSchemaSet schemas = new XmlSchemaSet();

schemas.Add(null, xsdMarkup.CreateReader());
schemas.Add(null, xsdMarkup2.CreateReader());

schemas.Compile();

您确定末尾需要哈希吗?: http : //www.w3.org/2000/09/xmldsig#

从该错误看来,尽管已导入,但似乎未加载XML签名模式。

将XML签名模式添加到显式模式集应确认这一点。

最可能的原因是架构集的XmlReslver找不到您指定的文件,这可能是当前文件夹/相对路径问题。

使用“ 进程监视器”查看可以在何处尝试加载XSD文件也可能会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM