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;
}