从包含数字签名的xsd创建数据集
本文关键字:创建 数据集 xsd 包含 数字签名 | 更新日期: 2023-09-27 17:50:22
Visual studio 2005, .NET 2.0
我正在开发一个消息传递服务,该服务基于我无法修改的第三方模式文件发送和接收xml消息。(我已经验证了模式是有效的,并使用Altova的XMLSpy生成了一个示例xml消息。)我发现处理此需求的最佳解决方案是基于模式创建一个数据集,然后使用dataset . readxml()填充数据集。DataSet.WriteXml()应该可以在创建消息时使用。
当我在过去建立数据集。xsd文件时,我使用了MSDataSetGenerator自定义工具。然而,当我通过MSDataSetGenerator运行它时,模式文件出现错误:
自定义工具错误:生成失败代码。无法转换输入xml文件内容到数据集。的"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?或者有人知道更好的方法来设置这个整体,而不是使用基于提供的模式的数据集吗?
来自W3C的原始XML Signature模式文件在顶部包含DTD头,我猜这是为了与旧的XML解析器兼容。显然。net模式阅读器不喜欢这样。最简单的解决方案是将
中的八行注释掉。<!DOCTYPE ...
]>
.