public static XmlDocument Apply(DataTemplate mainTemplate, DataTemplate freshTemplate, IXPathNavigable source)
        {
            if (freshTemplate == null)
            return mainTemplate.Apply(source);

              StringBuilder resultBuilder = new StringBuilder();
              using (XmlWriter writer = XmlWriter.Create(resultBuilder))
              {
            writer.WriteStartElement("Table");
            List<object> mainNodesList = new List<object>();
            foreach (IDataRow row in mainTemplate.GetRows(source))
              foreach (IDataColumn column in mainTemplate.Columns)
              {
            mainNodesList.Add(column.GetValue(row));
              }

            foreach (IDataRow row in freshTemplate.GetRows(source))
            {
              writer.WriteStartElement("Row");
              foreach (IDataColumn column in freshTemplate.Columns)
              {
            object value = column.GetValue(row);

            writer.WriteStartElement("Cell");
            if (value != null && !mainNodesList.Contains(value))
              writer.WriteAttributeString("new", "true");
            WriteCellValue(writer, value);
            writer.WriteEndElement();
              }
              writer.WriteEndElement();
            }
              }

              return XmlHlp2.XmlDocFromString(resultBuilder.ToString());
        }