public void Run(XmlWriter writer, List <XmlNameSpace> XmlNs) { switch (Type) { case BufferCommands.NewElement: var isTemplate = Name == TemplateKey; foreach (var scope in Repeater()) { Scope = scope; if (!If()) { continue; } if (!isTemplate) { if (XmlNs.Count > 0) { string[] EleNames = Name.Split(':'); if (EleNames.Length > 1) { string RealName = EleNames.Last(); if (NsElement) { var NameSpace = NameSpaces[0]; writer.WriteStartElement(EleNames[0], RealName, NameSpace.Value); for (int i = 0; i < NameSpaces.Count(); i++) { if (NameSpaces[i].Name != NameSpace.Name) { writer.WriteAttributeString(NameSpaces[i].Prefix, NameSpaces[i].Name, null, NameSpaces[i].Value); } } } else //Children use ns { var NameSpace = XmlNs.FirstOrDefault(x => x.Name == EleNames[0]); writer.WriteStartElement(RealName, NameSpace.Value); } } else { if (NsElement) { writer.WriteStartElement(Name, NameSpaces[0].Value); for (int i = 0; i < NameSpaces.Count(); i++) { if (NameSpaces[i].Name != NameSpaces[0].Name) { writer.WriteAttributeString(NameSpaces[i].Prefix, NameSpaces[i].Name, null, NameSpaces[i].Value); } } } else { writer.WriteStartElement(Name); } } } else { writer.WriteStartElement(Name); } } foreach (var attribute in Attributes.Where(attribute => attribute.Name != RepeaterKey && attribute.Name != IfKey)) { if (attribute.Name.Contains(':')) { string[] AttNames = Name.Split(':'); writer.WriteAttributeString(AttNames[0], AttNames[1], null, Inject(attribute.Value)); } else { writer.WriteAttributeString(attribute.Name, Inject(attribute.Value)); } } foreach (var child in Children) { child.Run(writer, XmlNs); } if (!isTemplate) { writer.WriteEndElement(); } } break; case BufferCommands.StringContent: writer.WriteString(Inject(Value)); break; } }