Exemple #1
0
        public Section Load()
        {
            var doc = new XmlDocument();

            doc.Load(_stream);
            var context = new XmlReaderContext(doc);

            return(SectionPersister.Load(context));
        }
Exemple #2
0
        public void Store(Section section)
        {
            var doc     = new XmlDocument();
            var context = new XmlWriterContext(doc);

            SectionPersister.Store(context, section);
            using (var writer = XmlWriter.Create(_stream, new XmlWriterSettings()
            {
                CloseOutput = false,
                Encoding = System.Text.Encoding.UTF8,
                Indent = true,
                IndentChars = "\t",
            }))
            {
                doc.Save(writer);
            }
        }
Exemple #3
0
            public static void Store(XmlWriterContext context, Section section)
            {
                context.Push(section.Name);
                int sections   = section.SectionCount;
                int parameters = section.ParameterCount;

                if (parameters != 0 || sections != 0)
                {
                    bool saveDirect = sections == 0 || parameters == 0;
                    if (parameters == 0)
                    {
                        context.StoreInAttribute("Style", "NoParameters");
                    }
                    else if (sections == 0)
                    {
                        context.StoreInAttribute("Style", "NoSections");
                    }
                    if (section.SectionCount != 0)
                    {
                        if (!saveDirect)
                        {
                            context.Push("Sections");
                        }
                        try
                        {
                            foreach (var subsection in section.Sections)
                            {
                                SectionPersister.Store(context, subsection);
                            }
                        }
                        finally
                        {
                            if (!saveDirect)
                            {
                                context.Pop();
                            }
                        }
                    }
                    if (section.ParameterCount != 0)
                    {
                        if (!saveDirect)
                        {
                            context.Push("Parameters");
                        }
                        try
                        {
                            foreach (var parameter in section.Parameters)
                            {
                                ParameterPersister.Store(context, parameter);
                            }
                        }
                        finally
                        {
                            if (!saveDirect)
                            {
                                context.Pop();
                            }
                        }
                    }
                }
                context.Pop();
            }
Exemple #4
0
            public static Section Load(XmlReaderContext context)
            {
                var  name  = context.CurrentName;
                var  res   = new Section(name);
                bool empty = context.Node.ChildNodes.Count == 0;

                if (empty)
                {
                    return(res);
                }
                var  style        = context.LoadFromAttribute("Style");
                bool noSections   = style == "NoSections";
                bool noParameters = !noSections && style == "NoParameters";

                if (noParameters || context.TryPush("Sections"))
                {
                    try
                    {
                        foreach (XmlNode subsectionNode in context.Node.ChildNodes)
                        {
                            context.Push(subsectionNode.Name);
                            try
                            {
                                res.AddSection(SectionPersister.Load(context));
                            }
                            finally
                            {
                                context.Pop();
                            }
                        }
                    }
                    finally
                    {
                        if (!noParameters)
                        {
                            context.Pop();
                        }
                    }
                }
                if (noSections || context.TryPush("Parameters"))
                {
                    try
                    {
                        foreach (XmlNode parameterNode in context.Node.ChildNodes)
                        {
                            context.Push(parameterNode.Name);
                            try
                            {
                                res.AddParameter(ParameterPersister.Load(context));
                            }
                            catch (Exception exc)
                            {
                                if (exc.IsCritical())
                                {
                                    throw;
                                }
                            }
                            finally
                            {
                                context.Pop();
                            }
                        }
                    }
                    finally
                    {
                        if (!noSections)
                        {
                            context.Pop();
                        }
                    }
                }
                return(res);
            }