示例#1
0
        /// <summary>
        /// Enregistre la liste dans un fichier config xml
        /// </summary>
        /// <param name="fichierXML"></param>
        public string Serialize(ParamValues datavalue)
        {
            string fluxxml = ""; //chaine xml final

            if (datavalue.Count() == 0)
            {
                return("<?xml version=\"1.0\" ?><param><empty>True</empty></param>");
            }


            ParamValues dvforxml = null; // datavalue buffer

            try
            {
                try
                {
                    // vérif et convert
                    dvforxml = datavalue.Clone();
                    try { dvforxml.Sort(); } catch { }
                    foreach (ParamValuesNode itemd in dvforxml.GetList())
                    {
                        if (itemd.Name.Length > 0 && itemd.Name[0] != '/')
                        {
                            itemd.Name = "/noparam/" + itemd.Name;
                        }
                    }
                }
                catch (Exception ev)
                {
                    throw new Exception("Verif : " + ev.Message);
                }

                StringBuilder builder = new StringBuilder();
                using (StringWriter stringWriter = new StringWriter(builder))
                {
                    XmlTextWriter writer = new XmlTextWriter(stringWriter);

                    // This produces UTF16 XML
                    writer.Indentation = 1;
                    writer.IndentChar  = '\t';
                    writer.Formatting  = Formatting.Indented;

                    writer.WriteStartDocument();
                    writer = savewriteburn(writer, dvforxml);

                    writer.WriteEndDocument();
                    writer.Close();
                }


                fluxxml = builder.ToString();
            }
            catch (Exception e)
            {
                throw new Exception("Datavalue toFluxXml : " + e, e);
            }
            finally
            {
            }


            //if (this.datavalue.isEncrypted) fluxxml = cryptageFlux(fluxxml);
            return(fluxxml);
        }
示例#2
0
        private XmlTextWriter savewriteburn(XmlTextWriter XmlTextWriter, ParamValues databurn)
        {
            string[] exnode     = new string[1];
            bool     start      = true;
            bool     exburn     = false;
            int      nodeouvert = 0;
            int      iielement  = 1;
            // ex :  /root/general/param/ex/data/
            // ex : /root/societe/liste/data/
            int ii = 0;

            foreach (ParamValuesNode datatab in databurn.GetList())
            {
                string namet = datatab.Name;
                if (namet[0] == '/')
                {
                    namet = namet.Substring(1);
                }
                if (namet[namet.Length - 1] == '/')
                {
                    namet = namet.Substring(0, namet.Length - 1);
                }
                int namti = namet.Split('/').Length;

                // on cree la premiere donnee
                if (start)
                {
                    exnode = namet.Split('/');
                    ii     = 0;
                    foreach (string item in namet.Split('/'))
                    {
                        //if (ii != namet.Split('/').Length - 1)
                        if (ii == namti - 1) // -1 pour taille -> index du tableau
                        {
                            XmlTextWriter = savewritenode(XmlTextWriter, datatab, item);
                            //if (datatab.type == "Data.Burn") { exburn = true; }// bricolage du bug quil ferme pas tout ...


                            //XmlTextWriter.WriteEndElement();
                            nodeouvert++;
                        }
                        else
                        {
                            XmlTextWriter.WriteStartElement(item); nodeouvert++;
                        }
                        ii++;
                    }


                    start = false;
                    continue;
                }



                // on ferme les node en trops
                int comptage = 0;
                ii = 0;
                foreach (string item in namet.Split('/'))
                {
                    if (item != exnode[ii])
                    {
                        comptage = exnode.Length - ii; // -1?
                        break;
                    }
                    ii++;
                }
                int comptage2 = comptage;
                for (ii = 0; comptage > 0; comptage--)
                {
                    XmlTextWriter.WriteEndElement();
                    nodeouvert--;
                }



                // on creer les nouveau node et la donnée

                ii = 0;
                foreach (string item in namet.Split('/'))
                {
                    if ((ii > nodeouvert - 1) || (exburn && ii >= nodeouvert - 1)) //&& ii != namti
                    {
                        if (ii == namti - 1)                                       // -1 pour taille -> index du tableau
                        {
                            if (exburn)
                            {
                                XmlTextWriter.WriteEndElement();         // bricolage ...
                            }
                            exburn        = false;
                            XmlTextWriter = savewritenode(XmlTextWriter, datatab, item);
                            //if (datatab.type == "Data.Burn") { exburn = true; } // bricolage du bug quil ferme pas tout ...

                            //XmlTextWriter.WriteEndElement();
                            nodeouvert++;
                            exnode = namet.Split('/');
                        }
                        else
                        {
                            XmlTextWriter.WriteStartElement(item);
                            nodeouvert++;
                        }
                    }

                    ii++;
                }



                // si c'est la derniere donnée on ferme tout
                if (databurn.Count() == iielement)
                {
                    while (nodeouvert > 0)
                    {
                        XmlTextWriter.WriteEndElement();
                        nodeouvert = nodeouvert - 1;
                    }
                }
                iielement++;
            }

            return(XmlTextWriter);
        }