私は、オランダの水泳選手のために、大会、クラブ、結果などを含むデータベースを構築しています。受信しているデータにいくつかの変更があったため、読み取っているXMLファイルの値が重複しているという問題が発生しています。
これが問題を引き起こすXMLファイルの一部です:
<LENEX version="3.0">
<MEETS>
<MEET name="Speedowedstrijd 2012 - 2013 deel 1">
<CLUB name="AZVD" type="CLUB" nation="NED" region="08" code="08-004">
<OFFICIALS>
<OFFICIAL nation="NED" gender="M" officialid="2329" lastname="xx">
<CONTACT email="xx" phone="xx" country="NL" />
</OFFICIAL>
</OFFICIALS>
</CLUB>
<CLUB name="A.Z.V.D." type="CLUB" nation="NED" region="8" code="08-004">
<ATHLETES>
<ATHLETE nation="NED" gender="M" athleteid="2358" license="xx" lastname="xx">
<RESULTS>
<RESULT eventid="1167" resultid="2359" swimtime="00:03:09.69">
<SPLITS>
<SPLIT distance="50" swimtime="00:00:40.71"/>
<SPLIT distance="100" swimtime="00:01:30.71"/>
</SPLITS>
</RESULT>
</RESULTS>
</ATHLETE>
</ATHLETES>
</CLUB>
</MEET>
</MEETS>
</LENEX>
これで、xmlファイルの読み取りは問題になりません。XDocumentを使用すると、すべてのノード、子などが取得されます。ただし、データベースに値を書き込むと、テーブルClub_Meetでkeyconstraintエラーが発生します。このテーブルは、クラブテーブルとミートテーブルの間のリンクを保持しており、各組み合わせは一意である必要があります。上記の例の両方のクラブがデータベース内の同じクラブを指しているため(一意のコード= 08-004、同じ値をデータベースに2回書き込もうとしているため、エラーが発生します。
だから私がやりたいのは、xmlファイルを調べてクラブを見つけるときです:このクラブが以前にこのXMLですでに見つかっているかどうかを確認し、見つかっている場合は、最初のクラブノードの下に子ノードをぶら下げます。このアクションの結果は(内部的に)次のようになります。
<LENEX version="3.0">
<MEETS>
<MEET name="Speedowedstrijd 2012 - 2013 deel 1">
<CLUB name="AZVD" type="CLUB" nation="NED" region="08" code="08-004">
<OFFICIALS>
<OFFICIAL nation="NED" gender="M" officialid="2329" lastname="xx">
<CONTACT email="xx" phone="xx" country="NL" />
</OFFICIAL>
</OFFICIALS>
<ATHLETES>
<ATHLETE nation="NED" gender="M" athleteid="2358" license="xx" lastname="xx">
<RESULTS>
<RESULT eventid="1167" resultid="2359" swimtime="00:03:09.69">
<SPLITS>
<SPLIT distance="50" swimtime="00:00:40.71"/>
<SPLIT distance="100" swimtime="00:01:30.71"/>
</SPLITS>
</RESULT>
</RESULTS>
</ATHLETE>
</ATHLETES>
</CLUB>
</MEET>
</MEETS>
</LENEX>
2番目のクラブノード<CLUB name="A.Z.V.D." type="CLUB" nation="NED" region="8" code="08-004">
が完全に削除されていることに注意してください。そのノードからは何も必要ありません。子ノードをあるクラブから別のクラブに移動し、空のクラブを削除するにはどうすればよいですか?私を正しい方向に向けることができる人はいますか?
(これがすべて理にかなっていることを願っています....)