public static KeyContainer Create(XElement element, KeyContainer parent = null) { string value = element.Attribute("Name").Value; KeyContainer keyContainer = new KeyContainer(value, parent); if (parent != null) { parent.SubKeys[value] = keyContainer; } List <XElement> list = new List <XElement>(); if (element.HasElements) { foreach (XElement xelement in element.Elements()) { string localName = xelement.Name.LocalName; if (Utils.IsEqual(localName, "Key", StringComparison.OrdinalIgnoreCase)) { list.Add(xelement); } else if (Utils.IsEqual(localName, "Value", StringComparison.OrdinalIgnoreCase)) { string value2 = xelement.Attribute("Name").Value; PropertyValue value3 = PropertyValue.Parse(xelement); keyContainer.Properties[value2] = value3; } } } foreach (XElement element2 in list) { KeyContainer.Create(element2, keyContainer); } return(keyContainer); }
public void ApplySnapshotFromXElement(string keyName, int lastInstanceExecuted, XElement rootElement) { keyName = this.NormalizeKeyName(keyName); KeyContainer parent = null; this.locker.WithWriteLock(delegate() { ExTraceGlobals.StoreWriteTracer.TraceDebug <string, int, string>((long)this.identityHash, "{0}: [1] Entering ApplySnapshotFromXElement (Key: {2})", this.identity, this.LastInstanceExecuted, keyName); if (!LocalMemoryStore.IsRootKeyName(keyName)) { KeyContainer keyContainer = this.FindContainer(keyName, true); if (keyContainer != null) { parent = keyContainer.Parent; parent.SubKeys.Remove(keyContainer.Name); } } string keyLastPart = this.GetKeyLastPart(keyName); rootElement.SetAttributeValue("Name", keyLastPart); KeyContainer keyContainer2 = KeyContainer.Create(rootElement, parent); if (parent == null) { this.rootContainer = keyContainer2; } this.SetStats(new int?(lastInstanceExecuted)); ExTraceGlobals.StoreWriteTracer.TraceDebug <string, int>((long)this.identityHash, "{0}: [1] Exiting ApplySnapshotFromXElement", this.identity, lastInstanceExecuted); }); }