private static Step ParseStep(XmlElement stepElement, int index) { var parameters = new Dictionary <string, string>(); // attribute model foreach (XmlAttribute attr in stepElement.Attributes) { parameters.Add(ToPascalCase(attr.Name), attr.Value); } var children = stepElement.SelectNodes("*"); if (children.Count == 0 && stepElement.InnerXml != null && stepElement.InnerXml.Trim().Length > 0) { // default property model parameters.Add("", stepElement.InnerText); } else { // element model foreach (XmlElement childElement in children) { var name = childElement.Name; if (parameters.ContainsKey(name)) { throw new InvalidPackageException(String.Format(SR.Errors.StepParsing.AttributeAndElementNameCollision_2, stepElement.Name, name)); } parameters.Add(name, childElement.InnerXml); } } return(Step.BuildStep(index, stepElement.Name, parameters)); }