private static ITarget LoadTarget(XElement element) { if (element.Name == "seq") { var target = new MapSequence(); target.Action = LoadAction(element); foreach (var sub in element.Elements()) { var minCnt = 1; var maxCnt = 1; var handle = true; var maximize = false; foreach (var attr in sub.Attributes()) { var name = attr.Name.LocalName; if (name.StartsWith("s-")) { name = name.Substring(2); if (name == "min") { minCnt = int.Parse(attr.Value); } else if (name == "max") { maxCnt = int.Parse(attr.Value); } else if (name == "handle") { handle = bool.Parse(attr.Value); } else if (name == "maximize") { maximize = bool.Parse(attr.Value); } } } var subTarget = LoadTarget(sub); target.Sequence.Add(new MapSequence.SequenceToken { MinCount = minCnt, MaxCount = maxCnt, ActionHandling = handle, Target = subTarget, Maximize = maximize }); } return(target); } else { var target = new MapTarget(); target.Action = LoadAction(element); foreach (var attr in element.Attributes()) { var name = attr.Name.LocalName; if (!name.Contains("-") && name != "h") { target.TagFilter[name] = StringFilter.Parse(attr.Value); } } return(target); } throw new Exception("Unknown target"); }