我使用MS XmlDiffPatch tool比较两个序列化对象的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>
关于如何处理差异的任何建议只能显示两者之间的差异?
我想要一个刚刚显示的最终显示 NumberNights:oldvalue(4),new value(5)
Xml Diff Tool具有GetHtml()函数,但它显示了所有值,只是突出显示已更改的值。目前为了获得差异,我通过生成的CSS查找CSS“lightgreen”,然后执行字符串操作以查找节点的名称..这对于充满审计数据的表来说是疯狂的并且非常慢!任何更好的想法都会受到赞赏!
答案 0 :(得分:3)
您决定使用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>
这将保留标记结构,指示哪些标记具有已修改的内容,并显示由管道(|
)字符分隔的先前/当前值。