public static KeyValues ImportKeyValue(string content, bool overrideparentnode) { var rmvRemark = regKv.Matches(regRemark.Replace(content, "")); int depth = 0; KeyValues kv = new KeyValues("RootKey"); KVNode current = null; for (int i = 0; i < rmvRemark.Count; i++) { string str = regQuote.Replace(rmvRemark[i].Value, ""); if (str.Equals("}")) //single { if (current.Type != KVNode.KVNodeType.Root) { current = current.Parent; depth--; } } else //two mixed { string nxt_str = regQuote.Replace(rmvRemark[i + 1].Value, ""); if (str.Equals("#base")) //basefile { kv.AddBaseFile(nxt_str); i++; } else if (nxt_str.Equals("{")) //parent { if (current == null) { kv.Root.KeyName = str; current = kv.Root; } else { if (overrideparentnode && current.FindSingleNode(str, KVNode.KVNodeType.Parent) != null) { current = current.FindSingleNode(str, KVNode.KVNodeType.Parent); } else { var node = new KVNode(str); current.AppendNode(node); current = node; } } depth++; } else //child { current.SetValue(nxt_str, str, true); } i++; } } if (depth == 0) { return(kv); } return(null); }