/// <summary> /// Parses an ISchemaElement from the XmlElement. /// </summary> /// <param name="schemaElement">ISchemaElement to fill in.</param> /// <param name="element">XmlElement to parse from.</param> private void ParseObjectFromElement(ISchemaElement schemaElement, XmlElement element) { foreach (XmlAttribute attribute in element.Attributes) { this.SetAttributeOnObject(schemaElement, attribute.LocalName, attribute.Value); } foreach (XmlNode node in element.ChildNodes) { XmlElement childElement = node as XmlElement; if (childElement != null) { ISchemaElement childSchemaElement = null; ICreateChildren createChildren = schemaElement as ICreateChildren; if (createChildren == null) { throw new InvalidOperationException("ISchemaElement with name " + element.LocalName + " does not implement ICreateChildren."); } else { childSchemaElement = createChildren.CreateChild(childElement.LocalName); } if (childSchemaElement == null) { childSchemaElement = this.CreateObjectFromElement(childElement); if (childSchemaElement == null) { throw new InvalidOperationException("XmlElement with name " + childElement.LocalName + " does not have a corresponding ISchemaElement."); } } this.ParseObjectFromElement(childSchemaElement, childElement); IParentElement parentElement = (IParentElement)schemaElement; parentElement.AddChild(childSchemaElement); } else { XmlText childText = node as XmlText; if (childText != null) { this.SetAttributeOnObject(schemaElement, "Content", childText.Value); } } } }
private void ParseObjectFromElement(ISchemaElement schemaElement, XmlElement element) { foreach (XmlAttribute attribute in element.Attributes) { SetAttributeOnObject(schemaElement, attribute.LocalName, attribute.Value); } foreach (XmlNode node in element.ChildNodes) { XmlElement childElement = node as XmlElement; if (childElement != null) { ISchemaElement childSchemaElement = null; ICreateChildren createChildren = schemaElement as ICreateChildren; if (createChildren == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, WixHarvesterStrings.EXP_ISchemaElementDoesnotImplementICreateChildren, element.LocalName)); } else { childSchemaElement = createChildren.CreateChild(childElement.LocalName); } if (childSchemaElement == null) { childSchemaElement = this.CreateObjectFromElement(childElement); if (childSchemaElement == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, WixHarvesterStrings.EXP_XmlElementDoesnotHaveISchemaElement, childElement.LocalName)); } } this.ParseObjectFromElement(childSchemaElement, childElement); IParentElement parentElement = (IParentElement)schemaElement; parentElement.AddChild(childSchemaElement); } else { XmlText childText = node as XmlText; if (childText != null) { SetAttributeOnObject(schemaElement, "Content", childText.Value); } } } }