【发布时间】:2015-08-10 20:04:48
【问题描述】:
我正在尝试比较两个 xml 文件并显示差异(如果发现)。
目前我正在使用XML Diff 来寻找差异。
使用方法
private bool CheckDifferences(string originalFile, string newFile, ref string difference)
{
var diff = new XmlDiff
{
IgnoreComments = true,
IgnorePI = true,
IgnoreWhitespace = true,
Algorithm = XmlDiffAlgorithm.Precise
};
var sw = new StringWriter();
var writer = new XmlTextWriter(sw);
writer.Formatting = Formatting.Indented;
var originalReader = new XmlTextReader(new StringReader(originalFile));
var modifiedReader = new XmlTextReader(new StringReader(newFile));
var status = diff.Compare(originalReader, modifiedReader, writer);
difference = sw.ToString();
writer.Close();
originalReader.Close();
modifiedReader.Close();
return status;
}
但difference 将只包含更改,而不是确切更改的内容。
例如,我想要实现的是
xml1 - 原始文件
<catalog>
<book id="bk11">
<author>AuthorName1</author>
</book>
</catalog>
xml2 - 新文件
<catalog>
<book id="bk11">
<author>AuthorName2</author>
</book>
</catalog>
所以我想显示作者已更改为 AuthorName2 等...
xml 文件结构未知,但两个文件的结构相同。
还查看了XNode.DeepEquals,但它也返回是否有任何区别。但没有什么区别。
感谢任何帮助
【问题讨论】:
-
请举例说明差异包含什么,以及您希望它包含什么。
-
@Polyfun:正如我在问题中提到的,对于我提供的示例 xml,我想显示作者更改为 ->AuthorName2
-
我假设他们会有一个 id。为什么不直接阅读 XML 并进行比较。
-
Notepad++,例如有一个插件可以让你比较两个文件。既然有这么多工具已经可以做到这一点,为什么还要开发呢?
-
@Fjodr:这不仅仅是比较两个文件。一个来自网络服务,另一个来自不同的来源。这是供最终用户验证和检查差异的。不然网上工具那么多!!!