2

XML テンプレート ファイルと、以前に保存した XML データベース レコードがあります。

  • XML ファイル - オブジェクトに必要な現在のフィールドがすべて含まれています - これは、アイテムが追加されると時間の経過とともに変化する可能性があります
  • XML データベース レコード - これは保存された XML です。「テンプレート」xml は、より多くのフィールドを含むように更新されている可能性があるため、ポイント 1 の XML とは異なる場合があります。

例はこれをクリアします..

次のような「テンプレート」xmlがあります。

<dvd displayText="">
  <field id="txtTitle" displayText="true" required="true" type="textbox" width="100" label="DVD タイトル" />
  <field id="txtDescription" displayText="true" required="true" type="textbox" width="50" label="あなたの説明" />
</DVD>

これにより、新しいレコードを作成するときにタイトルと説明を収集するように UI に指示されます。これは完全に機能します。

したがって、新しい DVD レコードを作成すると、これら 2 つのフィールドがユーザーに表示され、「タイトル」と「説明」の値が収集され、その値が SQL Server テーブルの XML フィールドに保存されます。

しかし、今やりたいことは、新しい「フィールド」定義をテンプレート xml に追加することです。私はこれを行いました.. この例では、"PurchasedDate" フィールド定義をテンプレート XML に追加します。

<dvd displayText="">
  <field id="txtTitle" displayText="true" required="true" type="textbox" width="100" label="DVD タイトル" />
  <field id="txtDescription" displayText="true" required="true" type="textbox" width="50" label="あなたの説明" />
  <field id="txtPurchaseDate" displayText="true" required="true" type="textbox" width="50" label="購入日" />
</DVD>

新しい DVD レコードを作成している場合、3 つの値を求めるプロンプトが表示されます。タイトル、説明、購入日。これはテンプレート XML に含まれているためです。しかし、以前に保存した DVD レコードを思い出すと、XML に新しい「購入日」フィールドがありません。

<dvd displayText="My DVD">
  <field id="txtTitle" displayText="true" required="true" type="textbox" width="100" label="DVD Title">マイ ムービー DVD</field>
  <field id="txtDescription" displayText="true" required="true" type="textbox" width="50" label="Your Description">この映画は最高です</field>
</DVD>

だから私がしたいのは、データベースに保存されたXML(上に表示)を取得し、テンプレートXMLファイルから欠落している「フィールド」定義を比較またはマージすることです..そして、以下のようになります:

<dvd displayText="My DVD">
  <field id="txtTitle" displayText="true" required="true" type="textbox" width="100" label="DVD Title">マイ ムービー DVD</field>
  <field id="txtDescription" displayText="true" required="true" type="textbox" width="50" label="Your Description">この映画は最高です</field>
  <field id="txtPurchaseDate" displayText="true" required="true" type="textbox" width="50" label="購入日" />
</DVD>

Linq を使用して、データベースから既存のレコードから値を取得しています (存在する場合)。現在、新しいレコードか既存のレコードかに応じて、XmlDocument.LoadXml(xmlstring) または XmlDocument.Load(filename) を実行しています。

次に、XmlDocument を取得し、テンプレートをこれにマージして、画面に表示する上記の XML 出力を生成します。

XmlDocuments を使用するよりも良い方法があれば、教えてください。喜んで調査し、使用します。

私はC#を使用しています...

どうもありがとう..

4

1 に答える 1

1

ソリューションには大きな冗長性の問題があります。たとえば、フィールドの 1 つの表示テキストを変更したり、必須フィールドを変更したりすると、同様の問題に直面します。

メタデータを実際のデータから分離します。つまり、フィールドを説明する 1 つのレコードを保持します。

<dvd displayText="">
  <field id="txtTitle" displayText="true" required="true" type="textbox" width="100" label="DVD Title" />
  <field id="txtDescription" displayText="true" required="true" type="textbox" width="50" label="Your Description" />
  <field id="txtPurchaseDate" displayText="true" required="true" type="textbox" width="50" label="Purchase Date" />
</dvd>

そして、データ レコードをフィールド ID と値に分解します。

<dvd displayText="A movie">
  <field id="txtTitle">Some title</field>
  <field id="txtDescription">Some description</field>
  <field id="txtPurchaseDate">2012-12-21</field>
</dvd>

メタ xml を使用して、ロード可能なフィールドを特定し、簡素化された xml から値を取得します。

そうしないと、レコードのレイアウトが変更されるたびにすべてのデータを同期する必要があります。

于 2012-11-07T12:01:10.403 に答える