如何解析XML差异以仅显示差异

Ugl*_*pot 6 c# xml

我使用MS XmlDiffPatch工具比较两个序列化对象的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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

(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>
Run Code Online (Sandbox Code Playgroud)

关于如何处理差异的任何建议只能显示两者之间的差异?

我想要一个只显示NumberNights的最终显示:oldvalue(4),new value(5)

Xml Diff Tool具有GetHtml()函数,但它显示所有值,并突出显示已更改的值.目前为了获得差异,我通过生成的CSS查找CSS"lightgreen",然后执行字符串操作以查找节点的名称..这对于充满审计数据的表来说是疯狂的并且非常慢!任何更好的想法赞赏!

Rob*_*ott 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>
Run Code Online (Sandbox Code Playgroud)

这会保留标签结构,指示哪些标签已修改内容,并显示由竖线 ( |) 字符分隔的先前/当前值。

  • xmldiff 的唯一问题是它对于大输入毫无用处(在比较两个 2mb XML 文件时,用 8 GB 内存杀死了我的四核 Xeon,只有很小的差异)。 (2认同)