【问题标题】:C# Creating dataset from xsd containing digital signatureC#从包含数字签名的xsd创建数据集
【发布时间】:2011-08-06 13:17:06
【问题描述】:

Visual Studios 2005,.NET 2.0

我正在开发一种消息传递服务,该服务基于我无法修改的第 3 方模式文件发送和接收 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?或者有没有人知道更好的方法来整体设置它,而不是使用基于提供的模式的数据集?

【问题讨论】:

    标签: c# xsd dataset digital-signature msdatasetgenerator


    【解决方案1】:

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

    中的八行
    <!DOCTYPE ...
    

    ]&gt;.

    【讨论】:

    • 感谢您的回复,但这是 4 年前提出的 :)。有问题的架构文件顶部没有 DOCTYPE 标记。我最终只是修改了架构文件并告诉第 3 方我正在这样做,因为他们无法给我替代方案。
    • 我意识到,只是想帮助别人(比如我),因为这些年来这是一个悬而未决的问题......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多