7

C# で 2 つの XML ファイルが同じかどうかを確認するにはどうすればよいですか?

XML ファイルのコメントを無視したい。

4

1 に答える 1

6

NuGet から無料のXMLDiffMerge パッケージをインストールします。このパッケージは基本的に、Microsoft のXML Diff and Patch GUI Toolの再パッケージ化されたバージョンです。

この関数はtrue、コメント、空白、および子の順序を無視して、2 つの XML ファイルが同一である場合に戻ります。おまけとして、違いも解決します (differences関数の内部変数を参照してください)。

/// <summary>
/// Compares two XML files to see if they are the same.
/// </summary>
/// <returns>Returns true if two XML files are functionally identical, ignoring comments, white space, and child
/// order.</returns>
public static bool XMLfilesIdentical(string originalFile, string finalFile)
{
    var xmldiff = new XmlDiff();
    var r1 = XmlReader.Create(new StringReader(originalFile));
    var r2 = XmlReader.Create(new StringReader(finalFile));
    var sw = new StringWriter();
    var xw = new XmlTextWriter(sw) { Formatting = Formatting.Indented };

    xmldiff.Options = XmlDiffOptions.IgnorePI | 
        XmlDiffOptions.IgnoreChildOrder | 
        XmlDiffOptions.IgnoreComments |
        XmlDiffOptions.IgnoreWhitespace;
    bool areIdentical = xmldiff.Compare(r1, r2, xw);

    string differences = sw.ToString();

    return areIdentical;
}   

関数を呼び出す方法は次のとおりです。

string textLocal = File.ReadAllText(@"C:\file1.xml");
string textRemote = File.ReadAllText(@"C:\file2.xml");
if (XMLfilesIdentical(textLocal, textRemote) == true)
{
    Console.WriteLine("XML files are functionally identical (ignoring comments).")
}
于 2013-11-13T12:40:51.623 に答える