XMLDocument与另一个文件进行比较

时间:2014-02-26 21:54:44

标签: c# .net xml

我在内存中有一个XmlDocument类型的文档和一个从xml文件的目录加载的文件。我想以最快的方式比较这些。

目前我正在这样做......但这是一个哈希,并不像字节一样快。我想将其修改为逐字节...但是想要检查可能加快这一点的任何事情......例如快速长度比较。我不确定我是否可以检查长度,因为一个在内存中,另一个是从文件加载。文件名总是一样的。所以我无法检查。

protected bool AreFilesTheSame(XmlDocument doc, string fileToCompareTo)
    {
        if (!File.Exists(fileToCompareTo))
            return (false);

        try
        {
            SHA1CryptoServiceProvider cryptNewPub = new SHA1CryptoServiceProvider();
            byte[] xmlBytes = Encoding.UTF8.GetBytes(doc.OuterXml.ToCharArray());
            cryptNewPub.ComputeHash(xmlBytes);

            SHA1CryptoServiceProvider cryptOldPub = new SHA1CryptoServiceProvider();
            FileStream fileStream = File.OpenRead(fileToCompareTo);
            cryptOldPub.ComputeHash(fileStream);
            fileStream.Close();

            if (cryptNewPub.Hash.Length != cryptOldPub.Hash.Length)
                return (false);

            for (int i = 0; i < cryptNewPub.Hash.Length; i++)
            {
                if (cryptNewPub.Hash[i] != cryptOldPub.Hash[i])
                    return (false);
            }

            return (true);
        }
        catch
        {
            return (false);
        }
    }

1 个答案:

答案 0 :(得分:1)

也许最简单的方法是加载第二个XML文件并比较OuterXML:

    protected bool AreFilesTheSame(XmlDocument doc, string fileToCompareTo)
    {
        if (!File.Exists(fileToCompareTo))
            return (false);

        try
        {
            XmlDocument doc2 = new XmlDocument();
            doc2.Load(fileToCompareTo);

            return doc.OuterXml == doc2.OuterXml;
        }
        catch
        {
            return (false);
        }
    }