2

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

一般的な diff を実行するだけで十分な場合は、XML パーサーをまったく使用しません。代わりに、Google の DiffMatchPatch ライブラリを使用します。以下にサンプルコードを示します。

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

その後、すべての差分のリストが表示されます。これらは、EQUAL、ADD、または DELETE として分類されます。これらは、file1 に到達するために file2 でどのような変換が発生する必要があるかを示しています。人間が読みやすいようにするには、セマンティック クリーンアップ メソッドを使用することをお勧めします。クリーンアップの程度を決定する設定可能な int があります (名前は覚えていませんが、このルートに行けば簡単に見つけることができます)。

   dmf.diff_cleanupSemantic(diffs);

その時点で、差分をループして文字列を見ることで、何が等しいか、何が等しくないかを確認できます (差分は型と文字列を持つオブジェクトです)。

ライブラリはhttp://code.google.com/p/google-diff-match-patch/からダウンロードでき、diff デモを使用してセマンティック クリーンアップがどの程度必要かをテストできます。

2 つのファイルの違いだけが必要な場合は、xml パーサーを使用するよりもはるかに簡単です。

于 2012-11-14T04:23:44.847 に答える