object IParser.Parse(XElement e) { object id; var idAttribute = e.Attribute("id"); if (idAttribute == null) { throw new ArgumentException(Message.Get("Xml.NoAttribute", "id", e), "e"); } else { id = idAttribute.Value; } string alias; var aliasAttribute = e.Attribute("alias"); if (aliasAttribute == null) { throw new ArgumentException(Message.Get("Xml.NoAttribute", "alias", e), "e"); } alias = aliasAttribute.Value; var attributeElements = e.Elements("attribute"); if (attributeElements.Count() == 0) { throw new ArgumentException(Message.Get("Xml.NoElements", "attribute", e), "e"); } var systemNameAttribute = e.Attribute("name"); if (systemNameAttribute == null || systemNameAttribute.Value == null) { throw new InvalidOperationException(alias); } var mainAttribute = e.Attribute("main"); if (mainAttribute == null) { throw new ArgumentException(Message.Get("Xml.NoAttribute", "main", e), "e"); } var ancestorIDAttribute = e.Attribute("ancestorID"); var ancestorID = -1; if (ancestorIDAttribute != null) { ancestorID = int.Parse(ancestorIDAttribute.Value); } var isHierarchicAttribute = e.Attribute("isHierarchic"); bool isHierarchic; if (isHierarchicAttribute == null) { isHierarchic = false; } else { isHierarchic = Convert.ToBoolean(int.Parse(isHierarchicAttribute.Value)); } var isEnumerationAttribute = e.Attribute("isEnumeration"); bool isEnumeration; if (isEnumerationAttribute == null) { isEnumeration = false; } else { isEnumeration = Convert.ToBoolean(int.Parse(isEnumerationAttribute.Value)); } var constraintElements = e.Elements("constraint"); var listElements = e.Elements("list"); return(new Entity ( id, alias, systemNameAttribute.Value, Convert.ToBoolean(int.Parse(mainAttribute.Value)), ancestorID, attributeElements.Select(o => attributeParser.Parse(o)), constraintElements.Select(x => constraintParser.Parse(x)), listElements.Select(x => listParser.Parse(x)), isHierarchic, isEnumeration )); }