0

現在、XML スキーマがあり、コードは xml ファイルを読み取り、スキーマに対して検証してデータベースに保存します。将来、スキーマが変更される可能性があります。新しいスキーマ用にコードを書き直す必要なく、コードでそれらを処理するにはどうすればよいでしょうか。

ありがとう、

例を挙げましょう

<Products>
   <product id="1">
      <name> ABC </name>
      <desc> good one </desc>
   </product>
</products>

XPath マッピング構成

Table      Column     XPath
Product    id         //Products/product/id
Product    name       //Products/product/name
Product    desc       //Products/product/desc

これで、C# コードは id、name、および desc を読み取り、マッピング構成に基づいて挿入ステートメントを生成します

スキーマが変更され、価格などの新しい要素が追加された場合、その価格をマッピングに追加するため、生成される新しい挿入ステートメントには価格が含まれます。

これは機能しますか?

4

3 に答える 3

1

すぐに思いつくこのような処理方法は、データが含まれていない既知の適切なスケルトン XML スキーマを用意し、コードを解析してそのスキーマを学習させ、与えられた任意の入力に対して実行することです。XML スキーマが変更された場合は、信頼できるユーザー/管理者に参加してもらい、既知の適切なスケルトンを変更してもらいます。

データベースが余分な作業をせずにこれらの変更を処理できることを確認する必要があります。また、定期的に実行して問題が検出された場合に警告を発するテストを少なくともいくつか用意する必要があります。このような「メンテナンスの少ない」プロセスで最も危険な要素の 1 つは、プロセスが静かに失敗することが多く、プロセスが壊れていることを伝える方法がないことです。

明らかに質問に含まれていないタグをたくさん追加したため、質問全体を取得できていないことを少し恐れていますが、これが役立つことを願っています.

于 2012-06-11T18:52:48.290 に答える
1

XML を解析してオブジェクトにロードするのは嫌いです。このため、次のアプローチを試すことができます。

話している XML データを表す C# オブジェクトを作成します。その C# クラスをシリアル化すると、厳密に型指定された XML スキーマが作成されます。また、将来、追加のスキーマ変更が必要になった場合は、C# クラスを変更して再シリアル化するだけで準備完了です。

これにより、XML ドキュメントを解析する必要もなくなります (CLR 内で使用していると仮定します)。これは、C# クラスを参照するだけで、解析せずに逆シリアル化してメモリに戻すことができるためです。

于 2012-06-11T19:39:29.550 に答える
1

XML データの場所が変更された場合、XML ファイルからがらくたを抽象化する (検索場所を説明するドキュメントにメタデータを含める) 場合を除き、運が悪いでしょう。データ要素が常に同じ場所にある場合は、XSD ファイルを別のファイルとして保持し、必要に応じて変更してドキュメントを検証するだけです。

于 2012-06-11T18:53:13.380 に答える