SEToolbox.Models.ResourceReportModel.CreateXmlReport C# (CSharp) Method

CreateXmlReport() private method

private CreateXmlReport ( ) : string
return string
        internal string CreateXmlReport()
        {
            var settingsDestination = new XmlWriterSettings
            {
                Indent = true, // Set indent to false to compress.
                Encoding = new UTF8Encoding(false)   // codepage 65001 without signature. Removes the Byte Order Mark from the start of the file.
            };

            var stringWriter = new StringWriter();

            using (var xmlWriter = XmlWriter.Create(stringWriter, settingsDestination))
            {
                xmlWriter.WriteStartElement("report");
                xmlWriter.WriteAttributeString("title", "Resource Report");
                xmlWriter.WriteAttributeString("world", _saveName);
                xmlWriter.WriteAttributeFormat("date", "{0:o}", _generatedDate);

                #region In game resources

                foreach (var item in _untouchedOre)
                {
                    xmlWriter.WriteStartElement("untouched");
                    xmlWriter.WriteElementFormat("orename", "{0}", item.MaterialName);
                    xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
                    xmlWriter.WriteEndElement();
                }

                foreach (var item in _unusedOre)
                {
                    xmlWriter.WriteStartElement("unused");
                    xmlWriter.WriteElementFormat("name", "{0}", item.FriendlyName);
                    xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
                    xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
                    xmlWriter.WriteEndElement();
                }

                foreach (var item in _usedOre)
                {
                    xmlWriter.WriteStartElement("used");
                    xmlWriter.WriteElementFormat("name", "{0}", item.FriendlyName);
                    xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
                    xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
                    xmlWriter.WriteEndElement();
                }

                foreach (var item in _playerOre)
                {
                    xmlWriter.WriteStartElement("player");
                    xmlWriter.WriteElementFormat("name", "{0}", item.FriendlyName);
                    xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
                    xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
                    xmlWriter.WriteEndElement();
                }

                foreach (var item in _npcOre)
                {
                    xmlWriter.WriteStartElement("npc");
                    xmlWriter.WriteElementFormat("name", "{0}", item.FriendlyName);
                    xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
                    xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
                    xmlWriter.WriteEndElement();
                }

                #endregion

                #region In game assets

                foreach (var item in _allCubes)
                {
                    xmlWriter.WriteStartElement("cubes");
                    xmlWriter.WriteElementFormat("friendlyname", "{0}", item.FriendlyName);
                    xmlWriter.WriteElementFormat("name", "{0}", item.Name);
                    xmlWriter.WriteElementFormat("typeid", "{0}", item.TypeId);
                    xmlWriter.WriteElementFormat("subtypeid", "{0}", item.SubtypeId);
                    xmlWriter.WriteElementFormat("count", "{0:0}", item.Count);
                    xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
                    xmlWriter.WriteElementFormat("time", "{0}", item.Time);
                    xmlWriter.WriteEndElement();
                }

                foreach (var item in _allComponents)
                {
                    xmlWriter.WriteStartElement("components");
                    xmlWriter.WriteElementFormat("friendlyname", "{0}", item.FriendlyName);
                    xmlWriter.WriteElementFormat("name", "{0}", item.Name);
                    xmlWriter.WriteElementFormat("typeid", "{0}", item.TypeId);
                    xmlWriter.WriteElementFormat("subtypeid", "{0}", item.SubtypeId);
                    xmlWriter.WriteElementFormat("count", "{0:0}", item.Count);
                    xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
                    xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
                    xmlWriter.WriteElementFormat("time", "{0}", item.Time);
                    xmlWriter.WriteEndElement();
                }

                foreach (var item in _allItems)
                {
                    xmlWriter.WriteStartElement("items");
                    xmlWriter.WriteElementFormat("friendlyname", "{0}", item.FriendlyName);
                    xmlWriter.WriteElementFormat("name", "{0}", item.Name);
                    xmlWriter.WriteElementFormat("typeid", "{0}", item.TypeId);
                    xmlWriter.WriteElementFormat("subtypeid", "{0}", item.SubtypeId);
                    xmlWriter.WriteElementFormat("count", "{0:0}", item.Count);
                    xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
                    xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
                    xmlWriter.WriteElementFormat("time", "{0}", item.Time);
                    xmlWriter.WriteEndElement();
                }

                #endregion

                #region Asteroid breakdown

                foreach (var asteroid in _untouchedOreByAsteroid)
                {
                    xmlWriter.WriteStartElement("asteroids");
                    xmlWriter.WriteAttributeString("name", asteroid.Name);

                    foreach (var item in asteroid.UntouchedOreList)
                    {
                        xmlWriter.WriteStartElement("untouched");
                        xmlWriter.WriteElementFormat("orename", "{0}", item.MaterialName);
                        xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
                        xmlWriter.WriteEndElement();
                    }

                    xmlWriter.WriteEndElement();
                }

                #endregion

                #region Ship breakdown

                // TODO:

                #endregion

                xmlWriter.WriteEndElement();
            }

            return stringWriter.ToString();
        }

Usage Example

コード例 #1
0
        /// <summary>
        /// Command line driven method.
        /// <example>
        /// /WR "Easy Start Report" "c:\temp\Easy Start Report.txt"
        /// /WR "C:\Users\%USERNAME%\AppData\Roaming\SpaceEngineersDedicated\Saves\Super Excellent Map\sandbox.sbc" "c:\temp\Super Excellent Map.txt"
        /// /WR "C:\Users\%USERNAME%\AppData\Roaming\SpaceEngineersDedicated\Saves\Super Excellent Map" "c:\temp\Super Excellent Map.txt"
        /// /WR "\\SERVER\Dedicated Saves\Super Excellent Map" "\\SERVER\Reports\Super Excellent Map.txt"
        /// </example>
        /// </summary>
        /// <param name="baseModel"></param>
        /// <param name="args"></param>
        public static void GenerateOfflineReport(ExplorerModel baseModel, string[] args)
        {
            var argList = args.ToList();
            var comArgs = args.Where(a => a.ToUpper() == "/WR" || a.ToUpper() == "-WR").Select(a => { return a; }).ToArray();
            foreach (var a in comArgs) argList.Remove(a);

            if (argList.Count < 2)
            {
                Environment.Exit(2);
                return;
            }

            var findSession = argList[0].ToUpper();
            var reportFile = argList[1];
            var reportExtension = Path.GetExtension(reportFile).ToUpper();

            if (reportExtension != ".HTM" &&
                reportExtension != ".HTML" &&
                reportExtension != ".TXT" &&
                reportExtension != ".XML")
            {
                Environment.Exit(1);
                return;
            }

            if (File.Exists(findSession))
            {
                findSession = Path.GetDirectoryName(findSession);
            }

            WorldResource world;

            if (Directory.Exists(findSession))
            {
                world = SelectWorldModel.LoadSession(findSession);
            }
            else
            {
                world = SelectWorldModel.FindSaveSession(SpaceEngineersConsts.BaseLocalPath.SavesPath, findSession);
            }

            if (world == null)
            {
                Environment.Exit(3);
                return;
            }

            baseModel.ActiveWorld = world;
            baseModel.ActiveWorld.LoadDefinitionsAndMods();
            baseModel.ActiveWorld.LoadSector(true);
            baseModel.ParseSandBox();

            var model = new ResourceReportModel();
            model.Load(baseModel.ActiveWorld.Savename, baseModel.Structures);
            model.GenerateReport();
            TempfileUtil.Dispose();

            if (reportExtension == ".HTM" || reportExtension == ".HTML")
                File.WriteAllText(reportFile, model.CreateHtmlReport());

            if (reportExtension == ".TXT")
                File.WriteAllText(reportFile, model.CreateTextReport());

            if (reportExtension == ".XML")
                File.WriteAllText(reportFile, model.CreateXmlReport());

            Environment.Exit(0);
        }