1

Visual Studio 2005、.NET 2.0

変更できないサードパーティのスキーマ ファイルに基づいて xml メッセージを送受信するメッセージング サービスに取り組んでいます。(スキーマが有効であることを確認し、Altova の XMLSpy を使用してサンプル xml メッセージを生成しました。) この要件を処理するために私が見つけた最善の解決策は、スキーマに基づいてデータセットを作成し、次に DataSet.ReadXml( を使用してデータセットに入力することです。 )。その後、メッセージの作成時に DataSet.WriteXml() を使用できるようになります。

過去に .xsd ファイルから DataSet を構築したとき、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 を使用できるようにするために設定する必要があるオプションはありますか? または、提供されたスキーマに基づくデータセットを使用する代わりに、これを全体的に設定するより良い方法を知っている人はいますか?

4

1 に答える 1

0

W3C の元の XML 署名スキーマ ファイルには、先頭に DTD ヘッダーが含まれています。これは、古い XML パーサーとの互換性を保つためだと思います。どうやら .Net スキーマ リーダーはそれを好まないようです。最も簡単な解決策は、

<!DOCTYPE ...

]>

于 2015-04-21T18:25:57.803 に答える