小编Ugl*_*pot的帖子

比较XML片段和返回差异

我有一个完整的序列化对象的审计列表,我想比较它们并返回差异列表.通过'比较',我的意思是我想返回元素的文本已经改变的地方,或者添加了节点的地方(因此它不在Xml1中,但它在Xml2中 - 它不会发生反过来)

示例xml:

<HotelBookingView xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Id>119</Id>
  <RoomId>1</RoomId>
  <ChangeRequested>false</ChangeRequested>
  <CourseBookings>      
    <CourseHotelLink>
      <Id>0</Id>
    </CourseHotelLink>
</CourseBookings>
</HotelBookingView>
Run Code Online (Sandbox Code Playgroud)

名称空间和标签的名称/大小写不会改变.在此示例中可以更改的是标记之间的值和"CourseHotelLink"(其序列化列表)的数量.

我想要的最终结果是哪个节点已更改的列表 - 旧值和新值.

比较它们的最佳选择是什么?我使用.Net 4.0所以linq是一个选项.我需要能够进行比较而不必知道所有节点的名称 - 尽管我只会比较两个相同类型的对象.我一直在尝试使用以下代码,但我无法适应它来挑选文本中的更改以及额外的节点.

XmlDocument Xml1 = new XmlDocument();
XmlDocument Xml2 = new XmlDocument();
Xml1.LoadXml(list[1].Changes);
Xml2.LoadXml(list[2].Changes);
foreach (XmlNode chNode in Xml2.ChildNodes)
{
   CompareLower(chNode);
}

protected void CompareLower(XmlNode aNode)
{
    foreach (XmlNode chlNode in aNode.ChildNodes)
    {
        string Path = CreatePath(chlNode);
        if (chlNode.Name == "#text")
        {
            //all my efforts at comparing text have failed
            continue;
        }
        if (Xml1.SelectNodes(Path).Count == 0)
        {
            XmlNode …
Run Code Online (Sandbox Code Playgroud)

c# xml compare

8
推荐指数
1
解决办法
2万
查看次数

如何解析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

compare ×1