Пример #1
0
        private void GenerateXmlDiffReport(string sourceXmlFile, string sourceXmlContent, string changedXmlFile, string changedXmlContent, string resultHtmlViewFile, XmlDiffOptions options)
        {
            MemoryStream  diffgram         = new MemoryStream();
            XmlTextWriter diffgramWriter   = new XmlTextWriter(new StreamWriter(diffgram));
            var           sourceXmlStream  = new MemoryStream(sourceXmlContent.ToByteArray());
            XmlReader     sourceXmlReader  = XmlReader.Create(new StreamReader(sourceXmlStream));
            XmlReader     changedXmlReader = XmlReader.Create(new StreamReader(new MemoryStream(changedXmlContent.ToByteArray())));

            logger.LogInfo("Comparing " + sourceXmlFile + " & " + changedXmlFile);
            XmlDiff xmlDiff    = new XmlDiff(options);
            bool    bIdentical = xmlDiff.Compare(sourceXmlReader, changedXmlReader, diffgramWriter);

            logger.LogInfo("Files compared " + (bIdentical ? "identical." : "different."));

            var        resultMS   = new MemoryStream();
            var        resultSW   = new StreamWriter(resultMS);
            TextWriter resultHtml = resultSW;

            //Wrapping
            resultHtml.Write("<html><style>td{ max-width:1000px; }</style><body><table>");

            diffgram.Seek(0, SeekOrigin.Begin);
            XmlDiffView xmlDiffView = new XmlDiffView();

            sourceXmlStream.Position = 0;
            XmlTextReader sourceReader = new XmlTextReader(sourceXmlStream);

            sourceReader.XmlResolver = null;
            xmlDiffView.Load(sourceReader, new XmlTextReader(diffgram));
            //This gets the differences but just has the
            //rows and columns of an HTML table
            xmlDiffView.SideBySideHtmlHeader(sourceXmlFile, changedXmlFile, bIdentical, resultHtml);
            xmlDiffView.GetHtml(resultHtml);
            xmlDiffView.GetHtml(resultHtml);

            resultHtml.WriteLine("</table></table></body></html>");
            using (var fs = new FileStream(resultHtmlViewFile, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                resultMS.WriteTo(fs);
            }
            resultSW.Close();
            resultMS.Close();
            resultHtml.Close();

            logger.LogInfo(resultHtmlViewFile + " saved successfully.");
        }