private void UpdateItems(CryptoXML source, CryptoXML target) { XmlNodeList sourceItems = source.SelectNodes("//Items/Item"); foreach (XmlNode sourceNode in sourceItems) { string sourceId = sourceNode.Attributes.GetNamedItem("item_id").Value; DateTime sourceDateTime = DateTime.Parse(sourceNode.Attributes.GetNamedItem("lastupdate").Value); string targetPath = string.Format("//Items/Item[@item_id='{0}']", sourceId); XmlNodeList targetItems = target.SelectNodes(targetPath); if(targetItems != null && targetItems.Count > 0) { // We have a match in the target document ... XmlNode targetNode = targetItems[0]; DateTime targetDateTime = DateTime.Parse(targetNode.Attributes.GetNamedItem("lastupdate").Value); // If the server version is older if(targetDateTime < sourceDateTime) { // This code is useless since the server version will be replaced by the client version targetNode.InnerXml = sourceNode.InnerXml; targetNode.Attributes.GetNamedItem("lastupdate").InnerText = sourceNode.Attributes.GetNamedItem("lastupdate").InnerText; targetNode.Attributes.GetNamedItem("active").InnerText = sourceNode.Attributes.GetNamedItem("active").InnerText; } // If the server version is more recent else if (targetDateTime > sourceDateTime) { sourceNode.InnerXml = targetNode.InnerXml; sourceNode.Attributes.GetNamedItem("lastupdate").InnerText = targetNode.Attributes.GetNamedItem("lastupdate").InnerText; sourceNode.Attributes.GetNamedItem("active").InnerText = targetNode.Attributes.GetNamedItem("active").InnerText; } else { // Already in sync ... } } } }
private void UpdateFolders( CryptoXML source, CryptoXML target) { XmlNodeList sourceItems = source.SelectNodes("//Folders/Folder"); foreach (XmlNode sourceNode in sourceItems) { string sourceId = sourceNode.Attributes.GetNamedItem("folder_id").Value; DateTime sourceDateTime = DateTime.Parse(sourceNode.Attributes.GetNamedItem("lastupdate").Value); string targetPath = string.Format("//Folders/Folder[@folder_id='{0}']", sourceId); XmlNodeList targetItems = target.SelectNodes(targetPath); if (targetItems != null && targetItems.Count > 0) { // We have a match in the target document ... XmlNode targetNode = targetItems[0]; DateTime targetDateTime = DateTime.Parse(targetNode.Attributes.GetNamedItem("lastupdate").Value); // If the server version is older if (targetDateTime < sourceDateTime) { targetNode.Attributes.GetNamedItem("name").InnerText = sourceNode.Attributes.GetNamedItem("name").InnerText; targetNode.Attributes.GetNamedItem("lastupdate").InnerText = sourceNode.Attributes.GetNamedItem("lastupdate").InnerText; targetNode.Attributes.GetNamedItem("active").InnerText = sourceNode.Attributes.GetNamedItem("active").InnerText; } // If the server version is more recent else if (targetDateTime > sourceDateTime) { sourceNode.Attributes.GetNamedItem("name").InnerText = targetNode.Attributes.GetNamedItem("name").InnerText; sourceNode.Attributes.GetNamedItem("lastupdate").InnerText = targetNode.Attributes.GetNamedItem("lastupdate").InnerText; sourceNode.Attributes.GetNamedItem("active").InnerText = targetNode.Attributes.GetNamedItem("active").InnerText; } else { // Already in sync ... } } } }