Exemplo n.º 1
0
            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;
                }
            }