无法在C#中验证多个xsd架构

时间:2009-10-16 09:48:14

标签: c# xml validation schema

我希望根据其架构定义验证数字签名的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”元素。

4 个答案:

答案 0 :(得分:2)

您还需要使用其他

加载导入的架构

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

答案 1 :(得分:1)

方案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();

答案 2 :(得分:0)

你确定在结束时需要哈希吗?: http://www.w3.org/2000/09/xmldsig#

答案 3 :(得分:0)

从错误看,似乎没有加载XML签名架构,尽管导入。

明确地将XML签名模式添加到模式集应该确认。

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

使用Process Monitor查看尝试加载XSD文件的位置也可能会有所帮助。