2009-06-16 9 views
0

私は通信バスからデータを読み込んで提示する車両情報システムを共同開発しています。バス上のシグナリング情報は、(私が推測しているような暗黒時代の)何らかの種類のデータベースに格納されており、xml-snapshotを抽出してデータを取り出すことしかできません。それは十分に悪くはなかったので、上層部の誰かが、システムのさまざまな部分を異なるプロジェクト(組織図では本当にうまく見えました)として扱い、より多くのデータベースにつなげる素晴らしいアイデアだと考えました...相互参照XMLファイルのマージ

これらのxmlファイルを1つにマージするのは今の私の責任です。壁に向かって頭を打ち始める前に、私の問題に対して何かきちんとした解決策があれば天才と確認することをお勧めします。

XMLの構造は次のように幾分ある:

<data> 
    <frame ID="1001"> 
    <attributes> 
     <name>Frame 1</name> 
     <description>The first frame</description> 
    </attributes> 
    <references/> 
    </frame> 
    <signal ID="1002"> 
    <attributes> 
     <signalid>1</signalid> 
     <name>Signal 1</name> 
    </attributes> 
    <references> 
     <frame ID="1001"/> 
    </references> 
    </signal> 
</data> 

すべてのエンティティ(信号、フレームなど)がルート要素の下に直接位置し、それぞれのいくつかがあり得ます。 IDは、ファイルがデータベースから抽出され、毎回変更されるときに生成されます。このIDの唯一の目的は、異なるエンティティをリンクすることです。「信号1」は「フレーム1」に属します。

エンティティの一意の識別子はエンティティごとに異なりますが、ID、名前またはいくつかの要素の組み合わせ。

プロジェクト間の重なりがあるので、2番目のXMLファイルは次のようになります。あなたは「フレーム1」と「シグナル1」が、複数のインスタンスが今そこにある見ることができるように

<data> 
    <frame ID="2001"> 
    <attributes> 
     <name>Frame 1</name> 
     <description>The first of many frames</description> 
    </attributes> 
    <references/> 
    </frame> 
    <signal ID="2002"> 
    <attributes> 
     <signalid>1</signalid> 
     <name>Signal 1</name> 
    </attributes> 
    <references> 
     <frame ID="2001"/> 
    </references> 
    </signal> 
    <signal ID="2003"> 
    <attributes> 
     <signalid>2</signalid> 
     <name>Signal 2</name> 
    </attributes> 
    <references> 
     <frame ID="2001"/> 
    </references> 
    </signal> 
</data> 

第2のファイルは「フレーム1」に別の信号を加える。

何私が達成しようとしていることは最初のファイルに「信号2」を追加することで、1001

にフレーム基準を更新し、私がこれまでに作ってみた最善の解決策は、プレーンを行うことです(linqを使用して)マージし、重複するファイル全体を検索し、関連するすべてのIDを保存します。最後に、削除されたIDを正しいものと置き換えます。

私の問題は(問題は奇妙なデータベース構造に由来しているので)問題はないと確信していますが、質問するのは馬鹿だと思います。

答えて

0

まあ私はあまりにも派手な解決策はなかったと思う。私は質問で説明した "解決策"を使用して終了しました。

さて、大きなものに!

関連する問題