2011-04-15 101 views
1

视觉工作室2005 XSD数据集,.NET 2.0C#创建从包含数字签名

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

当我在过去使用MSDataSetGenerator自定义工具创建DataSets关闭.xsd文件时。

Custom tool error: Failed to generate code. Unable to convert input xml file content to a DataSet. The 'http://www.w3.org/2000/09/xmldsig#:KeyInfo' element is not declared.

下面是有关数字签名/密钥信息/从模式文件签名行:但是架构文件我通过MSDataSetGenerator与错误运行它时有误差的。

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

而且在文件中它引用在架构中定义两个对象:在做

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

我也尝试加载模式:

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

但也抛出与未声明KeyInfo相同的错误。

是否有另一种方法来创建我缺少的数据集或我需要设置为可以使用MSDataSetGenerator的选项?还是有人知道一个更好的方式来设置整体,而不是使用基于提供的模式的数据集?

回答

0

来自W3C的原始XML签名模式文件在顶部包含一个DTD头,我想与旧的XML解析器兼容。显然,.Net模式阅读器不喜欢那样。最简单的办法是从

<!DOCTYPE ... 

]>注释掉八行。

+0

我很欣赏这种回应,但这是4年前问的:)。有问题的模式文件顶部没有DOCTYPE标记。我最终只是修改了模式文件,并告诉第三方我正在这样做,因为他们无法给我一个替代方案。 – Equixor 2015-04-21 23:08:33

+0

我意识到,只是想帮助别人(比如我),因为这些年来这是一个没有答案的问题...... – 2015-04-24 19:29:25