C# 仅使用C比较2个XML文件#

C# 仅使用C比较2个XML文件#,c#,xml,.net-4.0,linq-to-xml,C#,Xml,.net 4.0,Linq To Xml,我正在寻找一种与XML文件(下面的示例)进行比较的方法,并创建一个列表,其中包含两个文件之间差异的xpath,这样我就可以检查发生了什么变化 这可以在Linq中完成,还是我需要使用MS Diff补丁,我真的很想在C#中完成这一切,而不需要任何额外的DLL 或者我应该循环一个XML文件并将其与另一个进行比较,但是如果这样做,我可能会错过任何新的或删除的节点 归档 <info> <Retrieve> <LastNameInfo> <L

我正在寻找一种与XML文件(下面的示例)进行比较的方法,并创建一个列表,其中包含两个文件之间差异的xpath,这样我就可以检查发生了什么变化

这可以在Linq中完成,还是我需要使用MS Diff补丁,我真的很想在C#中完成这一切,而不需要任何额外的DLL

或者我应该循环一个XML文件并将其与另一个进行比较,但是如果这样做,我可能会错过任何新的或删除的节点

归档

<info>
  <Retrieve>
    <LastNameInfo>
      <LNameNum>1</LNameNum>
      <NumPeople>1</NumPeople>
      <NameType/>
      <LName>TEST</LName>
    </LastNameInfo>
    <Segment>
      <SegNum>1</SegNum>
      <Comment>A test</Comment>
    </Segment>
    <Segment>
      <SegNum>2</SegNum>
      <Dt>20110910</Dt>
      <Comment>B test</Comment>
    </Segment>
  </Retrieve>
</info>

我假设您想要比较XML(信息集)的等价性,而不仅仅是文件的词汇等价性。XML的词法形式(引用的选择、不重要的空白、属性的顺序)可能有很大的不同。所有这些都可以在不影响信息集的情况下进行更改

我将规范化这些文件 词汇同一性测试。如果它们不是等价的,则很难确定它们的不同之处(微小的差异相对容易,但当元素顺序等很重要时,可能没有客观的差异

我为我自己的应用程序(抱歉,是Java)做了这项工作,这并不是一件小事——我再次假设文件之间有相当接近的等价性。我还使它适用于实数,而实数必须在epsilon中一致,因为词法等价性不够好


有关一些XMLDiff工具的信息,请参见。我假设您想要比较XML(信息集)的等价性,而不仅仅是文件的词汇等价性。XML在词汇形式上可能会有很大的差异(引用的选择、不重要的空白、属性的顺序)。所有这些都可以在不影响信息集的情况下进行变化

我将规范化这些文件 如果它们不相等,就很难确定它们的不同之处(细微的差异相对容易,但当元素顺序等很重要时,可能就没有客观的差异)

我为我自己的应用程序(抱歉,是Java)做了这项工作,这并不是一件小事——我再次假设文件之间有相当接近的等价性。我还使它适用于实数,而实数必须在epsilon中一致,因为词法等价性不够好


请参阅,以获取一些XMLDiff工具,请为上述示例文件提供所需的输出。我们是否假设XML结构必须在两个文件之间匹配?使用我正在寻找的Xpath列表更新Q作为输出。然后,我将在代码中检查每个文档的每个Xpath,并决定保留或合并结果。。。如果元素存在,则结构将匹配。它们将位于同一位置,但例如,最多可能有9个分段或没有分段!@Adrian只有您知道您期望的变化情况。如果文件的变化程度受到限制,则可能得到有限的解。但一般问题类似于compa环形文本文件请为上述示例文件提供所需的输出。我们是否假设XML结构必须在两个文件之间匹配?使用我正在寻找的Xpath列表更新Q作为输出。然后,我将在代码中检查每个文档中的每个Xpath,并决定保留或合并结果…结构将匹配如果元素在那里,它们将在相同的位置,但例如,最多可能有9段或没有!@Adrian只有你知道你期望的变化是什么。如果对文件的变化有限制,则可能得到有限的解决方案。但一般的问题类似于比较文本文件如果你知道甚至有一个外部工具可以做这样的事情,你会很感兴趣吗?这是MS XMLDiff和patch-这个页面显示了必须考虑的不同的事情是的,这是我想要比较的信息集,文件总是不同的,因为它包含时间戳等,但它是我想要比较的节点内容。如果你知道甚至有一个外部工具可以做这样的事情吗?这里是MS XMLDiff和patch-此页面显示了必须考虑的不同内容。是的,我希望比较的是信息集,文件总是不同的,因为它包含时间戳等,但我想比较的是节点内容。
    <info>
  <Retrieve>
    <LastNameInfo>
      <LNameNum>1</LNameNum>
      <NameType/>
      <LName>TESTING</LName>
    </LastNameInfo>
    <Segment>
      <SegNum>1</SegNum>
      <Status>HS</Status>
      <Comment>A test</Comment>
    </Segment>
    <Segment>
      <SegNum>2</SegNum>
      <Dt>20110910</Dt>
      <Comment>COULD I USE LINQ</Comment>
    </Segment>
  </Retrieve>
</info>
/info/Retrieve/LastNameInfo/NumPeople
/info/Retrieve/LastNameInfo/LName
/info/Retrieve/Segment[1]/Status
/info/Retrieve/Segment[2]/Comment