2012-02-10 5 views
1

私はXMLにシリアライズ可能なクラスの複雑なグラフを持っています。しかし、私はどのようにのグラフのスキーマ構造に大きな変更を処理するのですか? XMLスキーマのアップグレードを処理するメカニズムはありますか?古いデータを新しいフォーマットに移行できるクラスがありますか?XML(de)のシリアライゼーションとスキーマのアップグレード

確かに私はちょうどXmlReader/XmlWriterを使用して、すべてのノードと属性を調べ、データを新しいフォーマットに変換する数千行のコードを書きますが、もっと良い方法がありますか?


私はObject graph serialization in .NET and code version upgradesを発見したが、私は、モデルに大きな変化がある場合にリンクの記事は適用されないと思います。

答えて

2

XmlReader/XmlWriterを使用して数千行のコードを変換してファイルに変換する代わりに、XSLTを使用できます。何百行ものコードと、おそらく実行速度が遅いということはまだ話していますが、XSLTをうまく利用すれば、はるかに高速化できます。

もう1つの方法は、古いクラスと新しいクラスの両方をリンクするC#プログラムを構築することです(もちろん、名前の衝突を避けるために古いクラスの名前を変更する必要があります)。プログラムはOldMyClassをディスクからロードし、その属性の値からNewMyClassを構築し、NewMyClassをディスクにシリアル化します。基本的には、このアプローチは変換のタスクをC#領域に移します。これは、あなたにはもっとよく知られているかもしれません。この場合

+0

+1ありがとうございます。XSLTは非常に有望です。しかし、http://stackoverflow.com/questions/1525299/xpath-and-xslt-2-0-for-netによると、.NETではまだXSLT 2.0が実装されていないようです。そして、XSLT 1.0はほぼ13歳なので、複雑な変更を処理するのに十分強力です。 – Paya

+0

@Pajaこれは1回限りの処理なので、.NET実装は不要です。コマンドラインから実行できるXSLTエンジンを使用します。エンジンにあなたの「スクリプト」とあなたのデータを送り、それが作り出す出力を保存してください。私は[Saxon](http://www.perfectxml.com/SoftDetails.asp?id=193)を使用しましたが、11年前には長かったです。それ以来、より新しいエンジンが書かれています。タスクのために1つを選ぶ前に、いくつかの調査をしたいかもしれません。確かに、XSLTを書くことは比較的急な学習曲線を持っていますが、初期の悩みを乗り越えれば、複雑な変換を非常に迅速に書くことができます。 – dasblinkenlight

+0

私はエンドユーザーのためのプログラムを書いているので、移行アルゴリズムをそれと共に配布する必要があります。そのため、追加の巨大なライブラリを使用してセットアップを膨らませたくないので、.NETフレームワークで直接実装するのはすばらしいでしょう。 – Paya

0

、私は私の物の私の変更を保持し、XmlSerializerを経由私のxmlを再作成します。これによりhttp://support.microsoft.com/kb/815813

私は私のオブジェクトに基づいて、新しいXMLスキーマをロードして保存します。

関連する問題