public override bool TryGetMember(GetMemberBinder binder, out object result) { result = null; if (xElement.Elements().All(x => x.DynamicCompatableName() != binder.Name) && binder.Name != xElement.DynamicCompatableName()) { return(true); } var xElements = xElement.Elements().Where(x => x.DynamicCompatableName() == binder.Name); if (xElements.Count() == 1) { var element = xElements.First(); ConvertAttributesToElements(element); var childElements = element.Elements().Select(x => x.DynamicCompatableName()); if (childElements.Count() > 1 && childElements.Distinct().Count() == 1) { result = element.Elements().Select(x => new DynamicXml(x)).ToArray(); } else { result = new DynamicXml(element); } } else if (!xElements.Any() && binder.Name == xElement.DynamicCompatableName()) { result = this; } else { result = xElements.Select(x => new DynamicXml(x)).ToArray(); } return(true); }
public override bool TryGetMember(GetMemberBinder binder, out object result) { result = null; if (xElement.Elements().All(x => x.DynamicCompatableName() != binder.Name) && binder.Name != xElement.DynamicCompatableName()) return false; var xElements = xElement.Elements().Where(x => x.DynamicCompatableName() == binder.Name); if (xElements.Count() == 1) { var element = xElements.First(); foreach (var xAttribute in element.Attributes()) { element.Add(new XElement(xAttribute.Name, xAttribute.Value)); xAttribute.Remove(); } var childElements = element.Elements().Select(x => x.DynamicCompatableName()); if (childElements.Count() > 1 && childElements.Distinct().Count() == 1) { result = element.Elements().Select(x => new DynamicXml(x)).ToArray(); } else result = new DynamicXml(element); } else if (!xElements.Any() && binder.Name == xElement.DynamicCompatableName()) result = this; else result = xElements.Select(x => new DynamicXml(x)).ToArray(); return true; }
public override bool TryGetMember(GetMemberBinder binder, out object result) { result = null; if (xElement.Elements().All(x => x.DynamicCompatableName() != binder.Name) && binder.Name != xElement.DynamicCompatableName()) return true; var xElements = xElement.Elements().Where(x => x.DynamicCompatableName() == binder.Name); if (xElements.Count() == 1) { var element = xElements.First(); ConvertAttributesToElements(element); var childElements = element.Elements().Select(x => x.DynamicCompatableName()); if (childElements.Count() > 1 && childElements.Distinct().Count() == 1) { result = element.Elements().Select(x => new DynamicXml(x)).ToArray(); } else result = new DynamicXml(element); } else if (!xElements.Any() && binder.Name == xElement.DynamicCompatableName()) result = this; else result = xElements.Select(x => new DynamicXml(x)).ToArray(); return true; }