2016-05-09 6 views
0

私は、XMLファイルを定期的にダウンロードし、以前にダウンロードしたバージョンのXMLと比較して(変更を検出するために)、適切な方法で変更を "実行" CRUDステートメント)を使用して、XMLのエンティティを反映するデータベースレコードを更新します。差異のXMLを比較する

「結果のXMLを以前にダウンロードしたバージョンと比較して、変更を検出するには」の一部のヘルプが必要です。わずかな違いがあり、次の2つのXML文書を考慮し

そう... ...

違いの

<ROOT> 
    <Stock> 
     <Vehicle id="2575124"> 
     <DealerName>Supercars London</DealerName> 
     <FriendlyName>Ford Ranger 3.2 double cab 4x4 XLT auto</FriendlyName> 
     <ModelName>Ranger</ModelName> 
     <MakeName>Ford</MakeName> 
     <Registration>DK08FKP</Registration> 
     <Price>43990</Price> 
     <Colour>WHITE</Colour> 
     <Year>2014</Year> 
     <Mileage>30000</Mileage> 
     <Images> 
      <Image Id="5119812" ThumbUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5119812&amp;Type=6&amp;Width=60&amp;Height=60&amp;FeedId=42" FullUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5119812&amp;Type=6&amp;Width=640&amp;FeedId=42" LastModified="2016-04-11T13:08:42.81" Priority="1"/> 
     </Images> 
     </Vehicle> 
     <Vehicle id="2648665"> 
     <DealerName>Super Cars London</DealerName> 
     <FriendlyName>BMW 320i</FriendlyName> 
     <ModelName>3 Series</ModelName> 
     <MakeName>BMW</MakeName> 
     <Registration>CN03YZG</Registration> 
     <Price>24990</Price> 
     <Colour>BRILLIANT WHITE</Colour> 
     <Year>2013</Year> 
     <Mileage>96000</Mileage> 
     <Images> 
      <Image Id="5201856" ThumbUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201856&amp;Type=6&amp;Width=60&amp;Height=60&amp;FeedId=42" FullUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201856&amp;Type=6&amp;Width=640&amp;FeedId=42" LastModified="2016-04-25T12:12:05.827" Priority="1"/> 
      <Image Id="5201857" ThumbUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201857&amp;Type=6&amp;Width=60&amp;Height=60&amp;FeedId=42" FullUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201857&amp;Type=6&amp;Width=640&amp;FeedId=42" LastModified="2016-04-25T12:12:09.117" Priority="2"/> 
      <Image Id="5201858" ThumbUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201858&amp;Type=6&amp;Width=60&amp;Height=60&amp;FeedId=42" FullUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201858&amp;Type=6&amp;Width=640&amp;FeedId=42" LastModified="2016-04-25T12:12:13.59" Priority="3"/> 
      <Image Id="5201859" ThumbUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201859&amp;Type=6&amp;Width=60&amp;Height=60&amp;FeedId=42" FullUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201859&amp;Type=6&amp;Width=640&amp;FeedId=42" LastModified="2016-04-25T12:12:18.453" Priority="4"/> 
      <Image Id="5201860" ThumbUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201860&amp;Type=6&amp;Width=60&amp;Height=60&amp;FeedId=42" FullUrl="http://www.somewhere.com/GetImage.aspx?ImageId=5201860&amp;Type=6&amp;Width=640&amp;FeedId=42" LastModified="2016-04-25T12:12:22.853" Priority="5"/> 
     </Images> 
     </Vehicle> 
    </Stock> 
</ROOT> 

概要新

<ROOT> 
    <Stock> 
     <Vehicle id="2574074"> 
     <DealerName>Super Cars London</DealerName> 
     <FriendlyName>Ford Ranger 3.2 double cab 4x4 XLT auto</FriendlyName> 
     <ModelName>Ranger</ModelName> 
     <MakeName>Ford</MakeName> 
     <Registration>DG55TPG</Registration> 
     <Price>40990</Price> 
     <Colour>WHITE</Colour> 
     <Year>2014</Year> 
     <Mileage>52000</Mileage> 
     <Images> 
      <Image Id="4771304" ThumbUrl="http://www.somewhere.com/GetImage.aspx?ImageId=4771304&amp;Type=6&amp;Width=60&amp;Height=60&amp;FeedId=42" FullUrl="http://www.somewhere.com/GetImage.aspx?ImageId=4771304&amp;Type=6&amp;Width=640&amp;FeedId=42" LastModified="2016-02-02T08:24:51.48" Priority="1"/> 
     </Images> 
     </Vehicle> 
     <Vehicle id="2648665"> 
     <DealerName>Super Cars London</DealerName> 
     <FriendlyName>BMW 320i</FriendlyName> 
     <ModelName>3 Series</ModelName> 
     <MakeName>BMW</MakeName> 
     <Registration>CN03YZG</Registration> 
     <Price>24990</Price> 
     <Colour>WHITE</Colour> 
     <Year>2013</Year> 
     <Mileage>96000</Mileage> 
     <Images/> 
     </Vehicle> 
    </Stock> 
</ROOT> 

オリジナル

  1. 車両id="2575124"はオリジナルには存在しません。これは「作成」を表します。
  2. 車両id="2574074"は新しいものには存在しません。これは「削除」を表します。
  3. 車両id="2648665"(元と新規の両方で表示されます)は、<Colour>(ホワイト→ブリリアントホワイト)とは異なります。これは「更新」を表します。
  4. 車両id="2648665"には、新しい<Image>ノードもあります。これは「作成」を表します(イメージはデータベース内のビークルと1:Mとなります)。例えば、私は指示の追加/削除/変更をDiffGramのを生成するXMLDiff見てきましたが、私はそれは私がまとめた変更を表すDiffGramのを発生させるための方法を見ることはできません

車両の不在および追加ではなく、変更1および2を「変更」 - と見なします。

XMLDiffでこれを行う方法はありますか?

または、私が探している結果を得るための「より良い」方法はありますか?

答えて

0

私は例えば...

XDocument xNewVehicle = new XDocument(new XElement("UsedStock", 
        from newVehicle in newXml.Descendants("Vehicle") 
        join oldVehicle in oldXml.Descendants("Vehicle") 
         on newVehicle.Attributes("id").First().Value equals oldVehicle.Attributes("id").First().Value into oldVehicles 
        where !oldVehicles.Any() // where the vehicle exists in new but not in old 
         || newVehicle.ToString() != oldVehicles.First().ToString() // where the new vehicle is not the same as the old vehicle 
       select newVehicle)); 
、LINQは、違いのためにXMLを解析するのはかなり良い仕事を行うことができますことを発見しました