Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compare XML files in C#?

Tags:

c#

compare

xml

I know that there has been a lot of questions like this but I couldn't find a reply that would satisfy my needs. I have to write an application that will compare XML files: there will be 2 types of compare, first for 2 files, listing all the differences and second one for multiple XML files listing all the variations from averages.

I am looking for some kind of class, library or API that will help me finish this task. Can you suggest some solutions ?

And yet, I do not know if I should use DOM or Xpath. Any suggestions ?

EDIT:

Ok so I have been trying to accomplish this task with XmlDiff tool but this is quite problematic to solve this for multiple Xml files - I have no idea how can I use this XmlDiffDiagram to sort out the differences among for instance 50 Xml files.

Is it going to be better with LINQ ?

like image 941
Patryk Avatar asked Nov 11 '11 15:11

Patryk


1 Answers

Microsoft's XML Diff and Patch API should work nicely:

public void GenerateDiffGram(string originalFile, string finalFile,
                       XmlWriter diffGramWriter)
    {
        XmlDiff xmldiff = new XmlDiff(XmlDiffOptions.IgnoreChildOrder |
                                      XmlDiffOptions.IgnoreNamespaces |
                                      XmlDiffOptions.IgnorePrefixes);
        bool bIdentical = xmldiff.Compare(originalFile, finalFile, false, diffGramWriter);
        diffGramWriter.Close();
    }

If you need to, you can also use the Patch tool to compare the files and merge them:

public void PatchUp(string originalFile, string diffGramFile, string outputFile)
    {
        XmlDocument sourceDoc = new XmlDocument(new NameTable());
        sourceDoc.Load(originalFile);

        using (var reader = XmlReader.Create(diffGramFile))
        {
            XmlPatch xmlPatch = new XmlPatch();
            xmlPatch.Patch(sourceDoc, reader);

            using (var writer = XmlWriter.Create(outputFile))
            {
                sourceDoc.Save(writer);
                writer.Close();
            }
            reader.Close();
        }
    }
like image 72
James Johnson Avatar answered Oct 21 '22 23:10

James Johnson