视觉工作室 2005、.NET 2.0
我正在开发一种消息传递服务,该服务基于我无法修改的第 3 方模式文件发送和接收 xml 消息。(我已经验证了架构是有效的,并使用 Altova 的 XMLSpy 生成了一个示例 xml 消息。)我发现处理这个要求的最佳解决方案是创建一个基于架构的数据集,然后使用 DataSet.ReadXml( )。DataSet.WriteXml() 应该能够在创建消息时使用。
当我过去从 .xsd 文件构建数据集时,我使用了 MSDataSetGenerator 自定义工具。但是,架构文件在通过 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?或者有没有人知道更好的方法来整体设置它,而不是使用基于提供的模式的数据集?