相关疑难解决方法(0)

您如何比较两个XML文档?

作为一些广泛的单元测试的基类的一部分,我正在编写一个辅助函数,它在C#(.NET)中递归地将一个XmlDocument对象的节点与另一个XmlDocument对象的节点进行比较.一些要求:

  • 第一个文档是源代码,例如我希望XML文档看起来像什么.因此,第二个是我想要找到差异的那个,它不能包含不在第一个文档中的额外节点.
  • 当发现太多显着差异时必须抛出异常,并且应该通过人们对该描述进行瞥见来容易理解.
  • 子元素顺序很重要,属性可以按任何顺序排列.
  • 有些属性是可以忽略的; 特别是xsi:schemaLocationxmlns:xsi,虽然我希望能够通过在哪些.
  • 名称空间的前缀必须在属性和元素中都匹配.
  • 元素之间的空白是无关紧要的.
  • 元素将要么有子元素 InnerText,但不能同时.

虽然我正在废弃一些东西:有没有人写过这样的代码,是否有可能在这里分享?

顺便说一下,你会把第一个和第二个文件称为什么?我一直把它们称为"源"和"目标",但它感觉不对,因为是我希望目标看起来像,否则我抛出异常.

.net c# xml xmldocument compare

60
推荐指数
7
解决办法
8万
查看次数

如何解析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",然后执行字符串操作以查找节点的名称..这对于充满审计数据的表来说是疯狂的并且非常慢!任何更好的想法赞赏!

c# xml

6
推荐指数
1
解决办法
8169
查看次数

标签 统计

c# ×2

xml ×2

.net ×1

compare ×1

xmldocument ×1