2012-05-10 87 views
4

我使用MS XmlDiffPatch tool比較兩個序列化對象的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> 

有關如何處理差異的任何建議,只能顯示兩者之間的差異?

我想最終顯示,僅僅示出了 NumberNights:OLDVALUE(4),新的值(5)

在XML比較工具具有GetHtml()函數,但它顯示的所有值和剛剛亮點那些已經改變。目前爲了獲得差異,我查看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

看起來更有用的輸出!我只是使用XmlDiffPatch,因爲它是由某人推薦的,請嘗試xmldiff,謝謝 – UglyTeapot

+0

只有xmldiff的問題是它對大量輸入沒有用(當我比較兩個2mb XML文件時,殺死了我的四核Xeon和8個ram,只有細微差別)。 –