【发布时间】:2012-03-12 19:18:35
【问题描述】:
我正在寻找一种方法来与 XML 文件(下面的示例)进行比较,并创建一个包含两个文件差异的 xpath 的列表,以便我可以检查发生了什么变化。
这可以在 Linq 中完成,还是我需要使用 MS Diff 补丁,我真的很想在 C# 中完成这一切,而不需要任何额外的 Dll。
或者我应该只循环遍历一个 XML 文件并将其与另一个进行比较,但是如果我这样做,我可能会错过任何新的或删除的节点!
文件 A
<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>
文件 B:
<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>
输出 XPath 列表
/info/Retrieve/LastNameInfo/NumPeople
/info/Retrieve/LastNameInfo/LName
/info/Retrieve/Segment[1]/Status
/info/Retrieve/Segment[2]/Comment
【问题讨论】:
-
请为上述示例文件提供所需的输出。
-
我们是否假设两个文件之间的 XML 结构必须匹配?
-
用我希望生成的 Xpath 列表更新了 Q 作为输出。然后我会在代码中检查每个文档中的每个 Xpath,并决定保留或合并结果...
-
如果元素存在则结构将匹配,它们将位于同一位置,但例如最多可能有 9 个 Segments 部分或没有!
-
@Adrian 只有您知道您期望的变化。在文件可以变化的程度受到限制的情况下,可能会获得有限的解决方案。但一般问题类似于比较文本文件
标签: c# xml .net-4.0 linq-to-xml