7

MS XmlDiffPatch ツールを使用して、シリアル化された 2 つのオブジェクトの xml を比較します。(C#)

XML サンプル 1:

<HotelBookingView xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
  <Id>119</Id> 
  <RoomId>1</RoomId> 
  <NumberNights>4</NumberNights>
  <CourseBookings>       
   <CourseHotelLink> 
    <Id>0</Id> 
   </CourseHotelLink> 
 </CourseBookings> 
</HotelBookingView>

XML サンプル 2:

<HotelBookingView xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
  <Id>119</Id> 
  <RoomId>1</RoomId> 
  <NumberNights>5</NumberNights>
  <CourseBookings>       
   <CourseHotelLink> 
    <Id>0</Id> 
   </CourseHotelLink> 
 </CourseBookings> 
</HotelBookingView>

(NumberNights が 4 から 5 に変更されました)

それらの間の違い:

<?xml version="1.0" encoding="utf-8" ?> 
  <xd:xmldiff version="1.0" srcDocHash="14315823970661993399" options="IgnoreChildOrder" fragments="no" xmlns:xd="http://schemas.microsoft.com/xmltools/2002/xmldiff">
  <xd:node match="1">
   <xd:node match="3">
    <xd:change match="1">5</xd:change> 
   </xd:node>
  </xd:node>

2つの違いのみを表示できるように差分を処理する方法に関するアドバイスはありますか?

NumberNights: oldvalue (4), new value (5) だけを示す最終的な表示が欲しい

Xml Diff ツールには GetHtml() 関数がありますが、すべての値が表示され、変更されたものだけが強調表示されます。現在、CSS 'lightgreen' の生成された html を調べて、違いを取得するために、文字列操作を行ってノードの名前を見つけます..監査データでいっぱいのテーブルでは非常識で非常に遅いです! より良いアイデアをいただければ幸いです。

4

1 に答える 1

2

XmlDiffPatch を使用することにしましたか? より意味のある出力が得られる xmldiffを使用しました (私の意見では)。上記の例では、出力は次のようになります

<HotelBookingView xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:diff="http://www.via.ecp.fr/~remi/soft/xml/xmldiff" diff:status="below"> 
  <NumberNights diff:status="modified">4|5</NumberNights>
</HotelBookingView>

これにより、タグ構造が保持され、コンテンツが変更されたタグが示され、以前/現在の値がパイプ ( |) 文字で区切られて表示されます。

于 2012-05-10T22:00:14.757 に答える