2

我想比较两个 xml 文件并找出它们的异同,

private void checkLanguage(string file1, string file2)
        {
            XmlDocument xmldoc1 = new XmlDocument();
            XmlDocument xmldoc2 = new XmlDocument();

            XmlNodeList xmlnode1;
            XmlNodeList xmlnode2;
            int i = 0;
            int j = 0;

            string str = null;
            FileStream fs1 = new FileStream(file1, FileMode.Open, FileAccess.Read);
            xmldoc1.Load(fs1);

            FileStream fs2 = new FileStream(file2, FileMode.Open, FileAccess.Read);
            xmldoc2.Load(fs2);

            xmlnode1 = xmldoc1.GetElementsByTagName("data");
            xmlnode2 = xmldoc2.GetElementsByTagName("data");

            for (i = 0; i <= xmlnode1.Count - 1; i++)
            {
                str = xmlnode1[i].Attributes["name"].Value;

                for (j = 0; j <= xmlnode2.Count - 1; j++)
                {
                    if (str == xmlnode2[j].Attributes["name"].Value)
                    {
                        lblResult.ForeColor = Color.Green;
                        lblResult.Text += Environment.NewLine + xmlnode1[i].Attributes["name"].Value;   
                    }

                    else
                    {
                        label4.ForeColor = Color.Red;
                        label4.Text += Environment.NewLine + xmlnode1[i].Attributes["name"].Value;
                    }
                }


            }
}

我的问题是差异字段中两个xml文件列表中的类似语言也是..如何解决这个问题..

有人能帮我吗?谢谢

4

2 回答 2

0

最好的方法是使用 linq to xml。将 xml 和外展都加载到语言值以进行比较。其他标签的方法相同。

谢谢阿哈里

于 2012-11-14T03:27:10.100 回答
0

如果进行一般差异就足够了,我根本不会使用 XML 解析器。相反,我会使用 Google 的 DiffMatchPatch 库。下面是一些示例代码;

    var dmf = new diff_match_patch();
    var diffs = dmf.diff_main(FileOneAsString, FileTwoAsString);

之后,您将获得所有差异的列表。这些分类为 EQUAL、ADD 或 DELETE。它们显示了在 file2 中必须进行哪些转换才能到达 file1。为了使其更具人类可读性,我建议使用语义清理方法。您可以设置一个 int 来确定清理的主要程度(我不记得名称,但如果您走这条路线,您可以轻松找到它)。

   dmf.diff_cleanupSemantic(diffs);

此时,您可以通过遍历 diff 并查看字符串(diff 是具有类型和字符串的对象)来查看什么相等和什么不相等。

该库可以在此处下载http://code.google.com/p/google-diff-match-patch/并且您可以使用 diff 演示测试您想要进行多少语义清理。

如果您想要的只是两个文件的差异,这将比使用 xml 解析器简单得多。

于 2012-11-14T04:23:44.847 回答