C#从包含数字签名的xsd创建数据集

时间:2011-04-15 18:25:00

标签: c# xsd dataset digital-signature msdatasetgenerator

Visual Studios 2005,.NET 2.0

我正在开发一种消息传递服务,它根据我无法修改的第三方模式文件发送和接收xml消息。 (我已经验证了模式是有效的,并使用Altova的XMLSpy生成了一个示例xml消息。)我发现处理此要求的最佳解决方案是基于模式创建数据集,然后使用DataSet.ReadXml填充数据集( )。然后,可以在创建消息时使用DataSet.WriteXml()。

当我在过去使用MSDataSetGenerator自定义工具构建DataSet .xsd文件时。但是,架构文件在通过MSDataSetGenerator运行时出错,错误为:

  

自定义工具错误:无法生成   码。无法转换输入xml文件   内容到DataSet。该   'http://www.w3.org/2000/09/xmldsig#:KeyInfo'   元素未声明。

以下是与架构文件中的数字签名/ KeyInfo / Signature相关的行。

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

在文件中,它引用了该模式中定义的2个对象:

<xs:element ref="ds:Signature" minOccurs="0"/>
<xs:element ref="ds:KeyInfo" minOccurs="0"/>

我还尝试通过执行以下方式加载架构:

DataSet ds = new DataSet();
ds.ReadXmlSchema("schema.xsd");

但是这也引发了关于KeyInfo未被声明的相同错误。

是否有其他方法可以创建我缺少的数据集或我需要设置的选项才能使用MSDataSetGenerator?或者有没有人知道更好的方法来整体设置,而不是使用基于提供的架构的数据集?

1 个答案:

答案 0 :(得分:0)

来自W3C的原始XML签名模式文件在顶部包含一个DTD标头,我想与旧的XML解析器兼容。显然.Net模式阅读器不喜欢这样。最简单的解决方案是注释掉

中的八行
<!DOCTYPE ...

]>