2012-05-10 31 views
4

MS XmlDiffPatch toolを使用して2つのシリアル化されたオブジェクトのxmlを比較します。 (C#)とXML差分を解析して差分のみを表示する方法

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> 

diffを処理して2つの違いだけを表示できるようにアドバイスしますか?

私はちょうど NumberNightsを示し、最終的なディスプレイたい:XML差分ツールがGetHtml()関数を持っていますが、それはすべての値を表示し、ちょうどハイライト(5)

、(4)新しい値をOLDVALUEを変更されたもの現在のところ、私はCSSの 'lightgreen'のために生成されたhtmlを見て、次にノードの名前を見つけるために文字列操作を行います。これは非常に面倒で、監査データがいっぱいのテーブルにとっては本当に遅いです!より良いアイデアが評価されました!

答えて

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> 

これは、タグ構造を保つようになり、タグは内容を変更したかを示し、およびパイプ(|)文字で区切られた前回/現在の値を示しています。

+0

これははるかに有用な出力のように見えます! – UglyTeapot

+0

xmldiffの問題は大きな入力では役に立たないということです(2つの2mbのXMLファイルを比較すると、8GBのRAMを持つ私のクアッドコアXeonを強制終了しますが、わずかな違いしかありません)。 )。 –