2011-04-15 67 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