Example #1
0
        public void ProjectAddItemFormatting_EmptyGroup()
        {
            string             content = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-8""?>
<Project DefaultTargets=`Build` ToolsVersion=`msbuilddefaulttoolsversion` xmlns=`msbuildnamespace`>
  <ItemGroup>
  </ItemGroup>
</Project>");
            ProjectRootElement xml     = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)),
                                                                   ProjectCollection.GlobalProjectCollection,
                                                                   preserveFormatting: true);
            Project project = new Project(xml);

            project.AddItem("Compile", "Program.cs");
            StringWriter writer = new EncodingStringWriter();

            project.Save(writer);

            string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-8""?>
<Project DefaultTargets=`Build` ToolsVersion=`msbuilddefaulttoolsversion` xmlns=`msbuildnamespace`>
  <ItemGroup>
    <Compile Include=""Program.cs"" />
  </ItemGroup>
</Project>");

            string actual = writer.ToString();

            VerifyAssertLineByLine(expected, actual);
        }
Example #2
0
        private void AssertWhiteSpacePreservation(string projectContents, string updatedProject,
                                                  Action <ProjectRootElement, Project> act)
        {
            // Note: This test will write the project file to disk rather than using in-memory streams.
            // Using streams can cause issues with CRLF characters being replaced by LF going in to
            // ProjectRootElement. Saving to disk mimics the real-world behavior so we can specifically
            // test issues with CRLF characters being normalized. Related issue: #1340
            var    file     = FileUtilities.GetTemporaryFile();
            var    expected = ObjectModelHelpers.CleanupFileContents(updatedProject);
            string actual;

            try
            {
                // Write the projectConents to disk and load it
                File.WriteAllText(file, ObjectModelHelpers.CleanupFileContents(projectContents));
                var projectElement = ProjectRootElement.Open(file, ProjectCollection.GlobalProjectCollection, true);
                var project        = new Project(projectElement);

                act(projectElement, project);

                // Write the project to a UTF8 string writer to compare against
                var writer = new EncodingStringWriter();
                project.Save(writer);
                actual = writer.ToString();
            }
            finally
            {
                FileUtilities.DeleteNoThrow(file);
            }

            VerifyAssertLineByLine(expected, actual);

            VerifyLineEndings(actual);
        }
Example #3
0
        public void DefaultProjectSaveContainsAllNewFileOptions()
        {
            // XML declaration tag, namespace, and tools version must be present by default.
            string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-8""?>
<Project ToolsVersion=""msbuilddefaulttoolsversion"" xmlns=""msbuildnamespace"">
  <ItemGroup>
    <ProjectReference Include=`..\CLREXE\CLREXE.vcxproj`>
      <metadata>value</metadata>
    </ProjectReference>
  </ItemGroup>
</Project>");

            Project project = new Project();

            project.AddItem("ProjectReference", @"..\CLREXE\CLREXE.vcxproj",
                            new[] { new KeyValuePair <string, string>("metadata", "value") });

            StringWriter writer = new EncodingStringWriter();

            project.Save(writer);

            string actual = writer.ToString();

            VerifyAssertLineByLine(expected, actual);
        }
Example #4
0
        public void NewProjectSaveWithOptionsNone()
        {
            // When NewProjectFileOptions.None is specified, we should not have an XML declaration,
            // tools version, or namespace in the project file.
            string expected = ObjectModelHelpers.CleanupFileContents(@"<Project>
  <ItemGroup>
    <ProjectReference Include=`..\CLREXE\CLREXE.vcxproj`>
      <metadata>value</metadata>
    </ProjectReference>
  </ItemGroup>
</Project>");

            Project project = new Project(NewProjectFileOptions.None);
            var     item    = project.AddItem("ProjectReference", @"..\CLREXE\CLREXE.vcxproj");

            item[0].SetMetadataValue("metadata", "value");

            StringWriter writer = new EncodingStringWriter();

            project.Save(writer);

            string actual = writer.ToString();

            VerifyAssertLineByLine(expected, actual);
        }
Example #5
0
        public string Serialize(GpsData data)
        {
            var textWriter = new EncodingStringWriter(Encoding.UTF8);

            _xmlSerializer.Serialize(textWriter, SerializeInternal(data));
            return(textWriter.ToString());
        }
Example #6
0
    public static string ToString(this XDocument xDocument, Encoding encoding)
    {
        xDocument.Declaration = new XDeclaration("1.0", encoding.BodyName, null);
        var textWriter = new EncodingStringWriter(encoding);

        xDocument.Save(textWriter);
        return(textWriter.ToString());
    }
Example #7
0
    public static void Save(this XDocument xDocument, string fileName, Encoding encoding)
    {
        xDocument.Declaration = new XDeclaration("1.0", encoding.BodyName, null);
        var textWriter = new EncodingStringWriter(encoding);

        xDocument.Save(textWriter);
        File.WriteAllText(fileName, textWriter.ToString(), encoding);
    }
        /// <summary>
        ///     Serialize the object as XML
        /// </summary>
        /// <param name="obj">Object to serialize</param>
        /// <param name="clrPropertyNameToLower">if set to <c>true</c> [color property name to lower].</param>
        /// <returns>
        ///     XML as string
        /// </returns>
        public string Serialize(object obj, bool clrPropertyNameToLower = false)
        {
            var ns = new XmlSerializerNamespaces();
            ns.Add(string.Empty, Namespace);
            var serializer = new XmlSerializer(obj.GetType());
            var writer = new EncodingStringWriter(Encoding);
            serializer.Serialize(writer, obj, ns);

            return writer.ToString();
        }
        /// <summary>
        /// Serializes an object into an XML document using the specified type.
        /// </summary>
        /// <param name="o">The object to serialize</param>
        /// <param name="t">The type</param>
        /// <returns></returns>
        public string Serialize(object o, Type t)
        {
            var ns = new XmlSerializerNamespaces();
            ns.Add(string.Empty, Namespace);
            var serializer = new System.Xml.Serialization.XmlSerializer(t);
            var writer = new EncodingStringWriter(Encoding);
            serializer.Serialize(writer, o, ns);

            return writer.ToString();
        }
Example #10
0
        /// <summary>
        /// Serialize the object as XML
        /// </summary>
        /// <param name="obj">Object to serialize</param>
        /// <returns>XML as string</returns>
        public string Serialize(object obj)
        {
            var ns = new XmlSerializerNamespaces();

            ns.Add(string.Empty, Namespace);
            var serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
            var writer     = new EncodingStringWriter(Encoding);

            serializer.Serialize(writer, obj, ns);
            return(writer.ToString());
        }
Example #11
0
        /// <summary>
        /// Serializes an object using the <see cref="XmlSerializer" />
        /// into an XML string.
        /// </summary>
        /// <param name="data">The data to serialize.</param>
        /// <typeparam name="TData">The type of data to process.</typeparam>
        /// <returns>An XML string containing serialized
        /// data.
        /// </returns>
        public static string SerializeToXmlString(object data)
        {
            var serializedData = new StringBuilder();

            using (StringWriter writer = new EncodingStringWriter(Encoding.UTF8, serializedData, CultureInfo.InvariantCulture))
            {
                var serializer = new XmlSerializer(data.GetType());
                serializer.Serialize(writer, data);
            }
            return(serializedData.ToString());
        }
Example #12
0
        public string Serialize(object obj)
        {
            XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();

            xmlSerializerNamespaces.Add(string.Empty, Namespace);
            System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
            EncodingStringWriter encodingStringWriter            = new EncodingStringWriter(Encoding);

            xmlSerializer.Serialize(encodingStringWriter, obj, xmlSerializerNamespaces);
            return(encodingStringWriter.ToString());
        }
Example #13
0
        /// <summary>
        /// Serialize the object as XML
        /// </summary>
        /// <param name="obj">Object to serialize</param>
        /// <returns>XML as string</returns>
        public string Serialize <T>(object obj)
        {
            var ns = new XmlSerializerNamespaces();

            ns.Add(string.Empty, Namespace);
            var serializer = new System.Xml.Serialization.XmlSerializer(typeof(T), STNXmlSerializerCodec.extraTypes);
            var writer     = new EncodingStringWriter(Encoding);

            serializer.Serialize(writer, obj, ns);

            return(writer.ToString());
        }
Example #14
0
        /// <summary>
        ///     Serialize the object as XML
        /// </summary>
        /// <param name="obj">Object to serialize</param>
        /// <param name="clrPropertyNameToLower">if set to <c>true</c> [color property name to lower].</param>
        /// <returns>
        ///     XML as string
        /// </returns>
        public string Serialize(object obj, bool clrPropertyNameToLower = false)
        {
            var ns = new XmlSerializerNamespaces();

            ns.Add(string.Empty, Namespace);
            var serializer = new XmlSerializer(obj.GetType());
            var writer     = new EncodingStringWriter(Encoding);

            serializer.Serialize(writer, obj, ns);

            return(writer.ToString());
        }
Example #15
0
        /// <summary>
        ///     Serialize the object as XML
        /// </summary>
        /// <param name="obj">Object to serialize</param>
        /// <returns>XML as string</returns>
        public string Serialize(object obj)
        {
            var ns = new CrestronXmlSerializerNamespaces();

            ns.Add(string.Empty, Namespace);

            var writer = new EncodingStringWriter(Encoding);

            CrestronXMLSerialization.SerializeObject(writer, obj, ns);

            return(writer.ToString());
        }
        public string Serialize(object obj)
        {
            if (obj == null)
                throw new ArgumentNullException("obj", "Cannot serialize null object for request");

            var ns = new XmlSerializerNamespaces();
            ns.Add(string.Empty, this.Namespace);
            var serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
            var writer = new EncodingStringWriter(this.Encoding);
            serializer.Serialize(writer, obj, ns);

            return writer.ToString();
        }
Example #17
0
        /// <summary>
        /// Serialize the object as XML
        /// </summary>
        /// <param name="obj">Object to serialize</param>
        /// <returns>XML as string</returns>
        public string Serialize(object obj)
        {
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

            ns.Add(string.Empty, this.Namespace);

            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
            EncodingStringWriter writer = new EncodingStringWriter(this.Encoding);

            serializer.Serialize(writer, obj, ns);

            return writer.ToString();
        }
Example #18
0
        public string Serialize(object o)
        {
            if (o == null) return null;

            var includeTypes = new HashSet<Type>();
            var track = new HashSet<object>();
            PopulateInculdeTypes(o, track, includeTypes);

            var serialzier = new System.Xml.Serialization.XmlSerializer(o.GetType(), includeTypes.ToArray());
            var writer = new EncodingStringWriter();
            serialzier.Serialize(writer, o);

            return writer.ToString();
        }
Example #19
0
        public void VerifyUtf8WithoutBomTreatedAsUtf8()
        {
            string expected = ObjectModelHelpers.CleanupFileContents(@"<Project>
</Project>");

            Project      project = new Project(NewProjectFileOptions.None);
            StringWriter writer  = new EncodingStringWriter(new UTF8Encoding(encoderShouldEmitUTF8Identifier: true));

            project.Save(writer);

            string actual = writer.ToString();

            VerifyAssertLineByLine(expected, actual);
        }
Example #20
0
 public string Sanitize(string xmlContent)
 {
     using (var stringWriter = new EncodingStringWriter(new StringBuilder(), Encoding.UTF8))
     {
         using (var noNamespaceWriter = new NamespaceStrippingXmlWriter(stringWriter))
         {
             var doc = XDocument.Parse(xmlContent);
             doc.WriteTo(noNamespaceWriter);
             noNamespaceWriter.Flush();
             var sanitizedXml = stringWriter.GetStringBuilder().ToString();
             return sanitizedXml;
         }
     }
 }
    public static void Main(string[] args)
    {
        XDocument xDoc = new XDocument(
            new XDeclaration("1.0", "utf-8", "yes"),
            new XElement("Entity", new XAttribute("Type", "attribute1")));

        StringBuilder builder = new StringBuilder();

        using (TextWriter writer = new EncodingStringWriter(builder, Encoding.UTF8))
        {
            xDoc.Save(writer);
        }

        Console.WriteLine(builder.ToString());
    }
Example #22
0
        private void AssertWhiteSpacePreservation(
            string projectContents,
            string updatedProject,
            Action <ProjectRootElement, Project> act)
        {
            // Each OS uses its own line endings. Using WSL on Windows leads to LF on Windows which messes up the tests. This happens due to git LF <-> CRLF conversions.
            if (NativeMethodsShared.IsWindows)
            {
                projectContents = Regex.Replace(projectContents, @"(?<!\r)\n", "\r\n", RegexOptions.Multiline);
                updatedProject  = Regex.Replace(updatedProject, @"(?<!\r)\n", "\r\n", RegexOptions.Multiline);
            }
            else
            {
                projectContents = Regex.Replace(projectContents, @"\r\n", "\n", RegexOptions.Multiline);
                updatedProject  = Regex.Replace(updatedProject, @"\r\n", "\n", RegexOptions.Multiline);
            }

            // Note: This test will write the project file to disk rather than using in-memory streams.
            // Using streams can cause issues with CRLF characters being replaced by LF going in to
            // ProjectRootElement. Saving to disk mimics the real-world behavior so we can specifically
            // test issues with CRLF characters being normalized. Related issue: #1340
            var    file     = FileUtilities.GetTemporaryFile();
            var    expected = ObjectModelHelpers.CleanupFileContents(updatedProject);
            string actual;

            try
            {
                // Write the projectConents to disk and load it
                File.WriteAllText(file, ObjectModelHelpers.CleanupFileContents(projectContents));
                var projectElement = ProjectRootElement.Open(file, ProjectCollection.GlobalProjectCollection, true);
                var project        = new Project(projectElement);

                act(projectElement, project);

                // Write the project to a UTF8 string writer to compare against
                var writer = new EncodingStringWriter();
                project.Save(writer);
                actual = writer.ToString();
            }
            finally
            {
                FileUtilities.DeleteNoThrow(file);
            }

            VerifyAssertLineByLine(expected, actual);

            VerifyLineEndings(actual);
        }
Example #23
0
        public string Serialize(object value, string root)
        {
            Ensure.ArgumentNotNull(value, nameof(value));
            Ensure.ArgumentNotNull(root, nameof(root));

            // Need to exclude namespaces from result xml.
            var emptyNamespace = new XmlSerializerNamespaces();

            emptyNamespace.Add(string.Empty, string.Empty);

            var serializer = new XmlSerializer(value.GetType(), new XmlRootAttribute(root));

            using (TextWriter writer = new EncodingStringWriter(Encoding.UTF8))
            {
                serializer.Serialize(writer, value, emptyNamespace);
                return(writer.ToString());
            }
        }
Example #24
0
        public static string SerializeToString(SetterBoard group)
        {
            JsonSerializer serializer = new JsonSerializer();

            try
            {
                StringBuilder sb = new StringBuilder();
                using (EncodingStringWriter writer = new EncodingStringWriter(sb))
                {
                    writer.Write(JsonConvert.SerializeObject(group, Formatting.Indented, settings));
                }

                return(sb.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Example #25
0
        public string Serialize(object o)
        {
            if (o == null)
            {
                return(null);
            }

            var includeTypes = new HashSet <Type>();
            var track        = new HashSet <object>();

            PopulateInculdeTypes(o, track, includeTypes);

            var serialzier = new System.Xml.Serialization.XmlSerializer(o.GetType(), includeTypes.ToArray());
            var writer     = new EncodingStringWriter();

            serialzier.Serialize(writer, o);

            return(writer.ToString());
        }
Example #26
0
        public void SetUnevaluatedValue()
        {
            string content = ObjectModelHelpers.CleanupFileContents(@"
                    <Project xmlns='msbuildnamespace' >
                        <ItemGroup>
                            <i Include='i1'>
                                <m1>v1</m1>
                                <m2>v%253</m2>
                            </i>
                        </ItemGroup>
                    </Project>
                ");

            ProjectRootElement projectXml = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)));
            Project            project    = new Project(projectXml);

            Assert.False(project.IsDirty);

            Helpers.GetFirst(project.GetItems("i")).SetMetadataValue("m1", "v2");
            Helpers.GetFirst(project.GetItems("i")).SetMetadataValue("m2", "v%214");

            Assert.True(project.IsDirty);

            StringWriter writer = new EncodingStringWriter();

            projectXml.Save(writer);

            string expected = ObjectModelHelpers.CleanupFileContents(@"
                    <Project xmlns='msbuildnamespace' >
                        <ItemGroup>
                            <i Include='i1'>
                                <m1>v2</m1>
                                <m2>v%214</m2>
                            </i>
                        </ItemGroup>
                    </Project>
                ");

            Helpers.CompareProjectXml(expected, writer.ToString());
            Assert.Equal("v!4", Helpers.GetFirst(project.GetItems("i")).GetMetadataValue("m2"));
        }
Example #27
0
        /// <summary>
        /// 将对象序列化为xml文本
        /// </summary>
        /// <param name="obj">对象</param>
        /// <param name="encoding">编码</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="InvalidOperationException"></exception>
        /// <returns></returns>
        public virtual string?Serialize(object?obj, Encoding encoding)
        {
            if (encoding == null)
            {
                throw new ArgumentNullException(nameof(encoding));
            }

            if (obj == null)
            {
                return(null);
            }

            var stringWriter  = new EncodingStringWriter(encoding);
            var xmlSerializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());

            using (var xmlWriter = XmlWriter.Create(stringWriter))
            {
                xmlSerializer.Serialize(xmlWriter, obj);
            }
            return(stringWriter.ToString());
        }
Example #28
0
        public void ChangeItemTypeNoNamespace()
        {
            string expected = ObjectModelHelpers.CleanupFileContents(@"<Project>
  <ItemGroup>
    <ProjectReference Include=`..\CLREXE\CLREXE.vcxproj` />
  </ItemGroup>
</Project>");

            Project project = new Project(NewProjectFileOptions.None);
            var     item    = project.AddItem("NotProjectReference", @"..\CLREXE\CLREXE.vcxproj");

            item[0].ItemType = "ProjectReference";

            StringWriter writer = new EncodingStringWriter();

            project.Save(writer);

            string actual = writer.ToString();

            VerifyAssertLineByLine(expected, actual);
        }
Example #29
0
        public override void Flush()
        {
            XDocument xDoc        = XmlExtensions.CreateLedgerDoc();
            XElement  commElement = xDoc.Root.AddElement("commodities");

            foreach (Commodity commodity in Commodities.Values)
            {
                commodity.ToXml(commElement.AddElement("commodity"), true);
            }

            XElement accElement = xDoc.Root.AddElement("accounts");

            Report.Session.Journal.Master.ToXml(accElement.AddElement("account"), a => IsAccountVisited(a));

            XElement tranElement = xDoc.Root.AddElement("transactions");

            foreach (Xact xact in TransactionsSet)
            {
                XElement tran = tranElement.AddElement("transaction");
                xact.ToXml(tran);

                XElement posts = tran.AddElement("postings");
                foreach (Post post in xact.Posts)
                {
                    if (post.HasXData && post.XData.Visited)
                    {
                        post.ToXml(posts.AddElement("posting"));
                    }
                }
            }

            using (StringWriter sw = new EncodingStringWriter(Encoding.UTF8))
            {
                xDoc.Save(sw);
                Report.OutputStream.Write(sw.ToString());
            }
        }
Example #30
0
        public void ChangeItemTypeWithXmlHeader()
        {
            string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-8""?>
<Project>
  <ItemGroup>
    <ProjectReference Include=`..\CLREXE\CLREXE.vcxproj` />
  </ItemGroup>
</Project>");

            Project project = new Project(NewProjectFileOptions.IncludeXmlDeclaration);
            var     item    = project.AddItem("NotProjectReference", @"..\CLREXE\CLREXE.vcxproj");

            item[0].ItemType = "ProjectReference";

            // Should still output XML declaration even when using UTF8 (NewProjectFileOptions.IncludeXmlDeclaration
            // was specified)
            StringWriter writer = new EncodingStringWriter();

            project.Save(writer);

            string actual = writer.ToString();

            VerifyAssertLineByLine(expected, actual);
        }
Example #31
0
        private static void ParseFolder(ProjectFolder folder, string dir, List <string> skippedBlocksList)
        {
            //Directory.CreateDirectory(dir);
            var path = Path.Combine(dir, NormalizeFolderName(folder.Name));

            foreach (var projectFolder in folder.SubItems)
            {
                ParseFolder(projectFolder, path, skippedBlocksList);
            }

            if (folder is IBlocksFolder)
            {
                var blkFld = folder as IBlocksFolder;

                foreach (var projectBlockInfo in blkFld.BlockInfos)
                {
                    try
                    {
                        var    src = projectBlockInfo.Export(ExportFormat.Default);
                        string xml = null;
                        if (src != null)
                        {
                            if (!removeNoBlanks)
                            {
                                /*var startIndex = src.IndexOf("   VAR ");
                                 * var endIndex = src.IndexOf("   END_VAR", startIndex);*/
                                var startIndex = 0;
                                var endIndex   = src.IndexOf("BEGIN", startIndex);
                                if (endIndex == -1)
                                {
                                    endIndex = src.IndexOf("END_TYPE", startIndex);
                                }

                                if (endIndex != -1)
                                {
                                    var search  = src;
                                    var pattern = "   // ";

                                    var indexes = Enumerable.Range(startIndex, endIndex - startIndex)
                                                  .Select(index =>
                                    {
                                        return(new
                                        {
                                            Index = index,
                                            Length = index + pattern.Length > search.Length
                                                    ? search.Length - index
                                                    : pattern.Length
                                        });
                                    })
                                                  .Where(searchbit =>
                                                         searchbit.Length == pattern.Length && pattern.Equals(
                                                             search.Substring(searchbit.Index, searchbit.Length),
                                                             StringComparison.OrdinalIgnoreCase))
                                                  .Select(searchbit => searchbit.Index);

                                    var updatedSrc = src;

                                    foreach (var x in indexes.Reverse())
                                    {
                                        if (removeOnlyOneBlank)
                                        {
                                            updatedSrc = updatedSrc.Remove(x + 5, 1);
                                        }
                                        else if (removeAllBlanks)
                                        {
                                            while (updatedSrc[x + 5].ToString() == " ")
                                            {
                                                updatedSrc = updatedSrc.Remove(x + 5, 1);
                                            }
                                        }
                                    }

                                    src = updatedSrc;
                                }
                            }

                            var ext = "xml";
                            if (projectBlockInfo.BlockLanguage == PLCLanguage.DB && projectBlockInfo.BlockType == PLCBlockType.DB)
                            {
                                ext = "db";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.SCL)
                            {
                                ext = "scl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.KOP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.FUP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.AWL)
                            {
                                ext = "awl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockType == PLCBlockType.UDT)
                            {
                                ext = "udt";
                            }
                            var file    = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + "." + ext);
                            var xmlfile = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + ".xml");

                            var         xmlValid = false;
                            XmlDocument xmlDoc   = new XmlDocument();
                            try
                            {
                                xmlDoc.LoadXml(src);
                                xmlValid = true;
                            }
                            catch
                            {
                                xmlValid = false;
                            }

                            if (xmlValid)
                            {
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//Created");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                StringBuilder     sb       = new StringBuilder();
                                XmlWriterSettings settings = new XmlWriterSettings
                                {
                                    Indent          = true,
                                    IndentChars     = "  ",
                                    NewLineChars    = "\r\n",
                                    NewLineHandling = NewLineHandling.Replace
                                };
                                using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                {
                                    xmlDoc.Save(writer);
                                }
                                src = sb.ToString();
                            }

                            if (src != null && ext != "db")
                            {
                                Directory.CreateDirectory(path);
                                File.WriteAllText(file, src, new UTF8Encoding(true));
                            }

                            if (xml != null)
                            {
                                var         xmlValid2 = false;
                                XmlDocument xmlDoc2   = new XmlDocument();
                                try
                                {
                                    xmlDoc2.LoadXml(xml);
                                    xmlValid2 = true;
                                }
                                catch
                                {
                                    xmlValid2 = false;
                                }

                                if (xmlValid2)
                                {
                                    if (!removeNoBlanks)
                                    {
                                        try
                                        {
                                            XmlNodeList nodes = xmlDoc2.GetElementsByTagName("MultiLanguageText");

                                            var pattern = "^( *)(.*)";

                                            foreach (var n in nodes.Cast <XmlNode>())
                                            {
                                                if (removeOnlyOneBlank)
                                                {
                                                    n.InnerText = Regex.Replace(n.InnerText, pattern, m => m.Groups[1].Value.Substring(0, m.Groups[1].Value.Length - 1) + m.Groups[2].Value);
                                                }
                                                else if (removeAllBlanks)
                                                {
                                                    n.InnerXml = Regex.Replace(n.InnerXml, pattern, m => "" + m.Groups[2].Value);
                                                }
                                            }
                                        }
                                        catch
                                        { }
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//Created");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//DocumentInfo");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    if (removeCodeFromXml && !xml.Contains("$$GITHANDLER-KEEPCODE$$"))
                                    {
                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//SW.Blocks.CompileUnit");
                                            var node  = nodes[0];
                                            node.InnerXml = "";
                                            var parent = node.ParentNode;
                                            foreach (var nd in nodes.Cast <XmlNode>().Skip(1).ToList())
                                            {
                                                parent.RemoveChild(nd);
                                            }
                                        }
                                        catch
                                        { }
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//MultilingualText");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//MultilingualText");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    StringBuilder     sb       = new StringBuilder();
                                    XmlWriterSettings settings = new XmlWriterSettings
                                    {
                                        Indent          = true,
                                        IndentChars     = "  ",
                                        NewLineChars    = "\r\n",
                                        NewLineHandling = NewLineHandling.Replace
                                    };
                                    using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                    {
                                        xmlDoc2.Save(writer);
                                    }

                                    xml = sb.ToString();

                                    if (_projectType == ProjectType.Tia14SP1)
                                    {
                                        xml = xml.Replace("<ProgrammingLanguage>SCL</ProgrammingLanguage>", "<ProgrammingLanguage>STL</ProgrammingLanguage>");
                                    }
                                }

                                Directory.CreateDirectory(path);
                                File.WriteAllText(xmlfile, xml, new UTF8Encoding(true));
                            }
                        }
                        else
                        {
                            Console.WriteLine("Skipping Block (null)" + projectBlockInfo.Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Skipping Block: \"" + projectBlockInfo.Name + "\" Exception: " + ex.Message);
                        skippedBlocksList.Add(projectBlockInfo.Name);
                    }
                }
            }
        }
Example #32
0
        private static void ParseFolder(ProjectFolder folder, string dir)
        {
            //Directory.CreateDirectory(dir);
            var path = Path.Combine(dir, NormalizeFolderName(folder.Name));

            foreach (var projectFolder in folder.SubItems)
            {
                ParseFolder(projectFolder, path);
            }

            if (folder is Step7ProjectV11.TIAOpennessProgramFolder)
            {
                var fld = folder as Step7ProjectV11.TIAOpennessProgramFolder;
                foreach (Step7ProjectV11.TIAOpennessProjectBlockInfo projectBlockInfo in fld.BlockInfos)
                {
                    try
                    {
                        var src = projectBlockInfo.GenerateSource();
                        if (src != null)
                        {
                            var ext  = projectBlockInfo.ProgrammingLanguage.ToLower();
                            var file = Path.Combine(path, projectBlockInfo.Name + "." + ext);

                            //if (projectBlockInfo.ProgrammingLanguage == "SCL" ||
                            //    projectBlockInfo.ProgrammingLanguage == "STL")
                            //{
                            //    if (!string.IsNullOrEmpty(src))
                            //    {
                            //        Directory.CreateDirectory(path);
                            //        File.WriteAllText(file, src);
                            //    }
                            //    file += "_header";
                            //    src = projectBlockInfo.GenerateSourceXML();
                            //}

                            var         xmlValid = false;
                            XmlDocument xmlDoc   = new XmlDocument();
                            try
                            {
                                xmlDoc.LoadXml(src);
                                xmlValid = true;
                            }
                            catch
                            {
                                xmlValid = false;
                            }

                            if (xmlValid)
                            {
                                XmlNodeList nodes = xmlDoc.SelectNodes("//Created");
                                XmlNode     node  = nodes[0];
                                node.ParentNode.RemoveChild(node);

                                var sb = new StringBuilder();
                                using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                {
                                    xmlDoc.Save(writer);
                                }
                                src = sb.ToString();
                                Directory.CreateDirectory(path);
                                File.WriteAllText(file, src);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Skipping Block (null)" + projectBlockInfo.Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Skipping Block (Exception)" + projectBlockInfo.Name);
                    }
                }
            }
        }
        private static void ParseFolder(ProjectFolder folder, string dir, List <string> skippedBlocksList)
        {
            //Directory.CreateDirectory(dir);
            var path = Path.Combine(dir, NormalizeFolderName(folder.Name));

            foreach (var projectFolder in folder.SubItems)
            {
                ParseFolder(projectFolder, path, skippedBlocksList);
            }

            if (folder is IBlocksFolder)
            {
                var blkFld = folder as IBlocksFolder;

                foreach (var projectBlockInfo in blkFld.BlockInfos)
                {
                    try
                    {
                        var    src = projectBlockInfo.Export(ExportFormat.Default);
                        string xml = null;
                        if (src != null)
                        {
                            var ext = "xml";
                            if (projectBlockInfo.BlockLanguage == PLCLanguage.DB && projectBlockInfo.BlockType == PLCBlockType.DB)
                            {
                                ext = "db";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.SCL)
                            {
                                ext = "scl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.KOP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.FUP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.AWL)
                            {
                                ext = "awl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockType == PLCBlockType.UDT)
                            {
                                ext = "udt";
                            }
                            var file    = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + "." + ext);
                            var xmlfile = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + ".xml");

                            var         xmlValid = false;
                            XmlDocument xmlDoc   = new XmlDocument();
                            try
                            {
                                xmlDoc.LoadXml(src);
                                xmlValid = true;
                            }
                            catch
                            {
                                xmlValid = false;
                            }

                            if (xmlValid)
                            {
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//Created");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                StringBuilder     sb       = new StringBuilder();
                                XmlWriterSettings settings = new XmlWriterSettings
                                {
                                    Indent          = true,
                                    IndentChars     = "  ",
                                    NewLineChars    = "\r\n",
                                    NewLineHandling = NewLineHandling.Replace
                                };
                                using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                {
                                    xmlDoc.Save(writer);
                                }
                                src = sb.ToString();
                            }

                            if (src != null && ext != "db")
                            {
                                Directory.CreateDirectory(path);
                                File.WriteAllText(file, src, new UTF8Encoding(true));
                            }

                            if (xml != null)
                            {
                                var         xmlValid2 = false;
                                XmlDocument xmlDoc2   = new XmlDocument();
                                try
                                {
                                    xmlDoc2.LoadXml(xml);
                                    xmlValid2 = true;
                                }
                                catch
                                {
                                    xmlValid2 = false;
                                }

                                if (xmlValid2)
                                {
                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//Created");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }
                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//DocumentInfo");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    StringBuilder     sb       = new StringBuilder();
                                    XmlWriterSettings settings = new XmlWriterSettings
                                    {
                                        Indent          = true,
                                        IndentChars     = "  ",
                                        NewLineChars    = "\r\n",
                                        NewLineHandling = NewLineHandling.Replace
                                    };
                                    using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                    {
                                        xmlDoc2.Save(writer);
                                    }

                                    xml = sb.ToString();

                                    xml = xml.Replace("<ProgrammingLanguage>SCL</ProgrammingLanguage>", "<ProgrammingLanguage>STL</ProgrammingLanguage>");
                                }

                                Directory.CreateDirectory(path);
                                File.WriteAllText(xmlfile, xml, new UTF8Encoding(true));
                            }
                        }
                        else
                        {
                            Console.WriteLine("Skipping Block (null)" + projectBlockInfo.Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Skipping Block: \"" + projectBlockInfo.Name + "\" Exception: " + ex.Message);
                        skippedBlocksList.Add(projectBlockInfo.Name);
                    }
                }
            }
        }
Example #34
0
        private static void ParseFolder(ProjectFolder folder, string dir, List <string> skippedBlocksList)
        {
            //Directory.CreateDirectory(dir);
            var path = Path.Combine(dir, NormalizeFolderName(folder.Name));

            foreach (var projectFolder in folder.SubItems)
            {
                ParseFolder(projectFolder, path, skippedBlocksList);
            }

            if (folder is IBlocksFolder)
            {
                var blkFld = folder as IBlocksFolder;

                foreach (var projectBlockInfo in blkFld.BlockInfos)
                {
                    try
                    {
                        var    src = projectBlockInfo.Export(ExportFormat.Default);
                        string xml = null;
                        if (src != null)
                        {
                            if (!removeNoBlanks)
                            {
                                /*var startIndex = src.IndexOf("   VAR ");
                                 * var endIndex = src.IndexOf("   END_VAR", startIndex);*/
                                var startIndex = 0;
                                var endIndex   = src.IndexOf("BEGIN", startIndex);
                                if (endIndex == -1)
                                {
                                    endIndex = src.IndexOf("END_TYPE", startIndex);
                                }

                                if (endIndex != -1)
                                {
                                    var search  = src;
                                    var pattern = "   // ";

                                    var indexes = Enumerable.Range(startIndex, endIndex - startIndex)
                                                  .Select(index =>
                                    {
                                        return(new
                                        {
                                            Index = index,
                                            Length = index + pattern.Length > search.Length
                                                    ? search.Length - index
                                                    : pattern.Length
                                        });
                                    })
                                                  .Where(searchbit =>
                                                         searchbit.Length == pattern.Length && pattern.Equals(
                                                             search.Substring(searchbit.Index, searchbit.Length),
                                                             StringComparison.OrdinalIgnoreCase))
                                                  .Select(searchbit => searchbit.Index);

                                    var updatedSrc = src;

                                    foreach (var x in indexes.Reverse())
                                    {
                                        if (removeOnlyOneBlank)
                                        {
                                            updatedSrc = updatedSrc.Remove(x + 5, 1);
                                        }
                                        else if (removeAllBlanks)
                                        {
                                            while (updatedSrc[x + 5].ToString() == " ")
                                            {
                                                updatedSrc = updatedSrc.Remove(x + 5, 1);
                                            }
                                        }
                                    }

                                    src = updatedSrc;
                                }
                            }

                            var ext = "xml";
                            if (projectBlockInfo.BlockLanguage == PLCLanguage.DB && projectBlockInfo.BlockType == PLCBlockType.DB)
                            {
                                ext = "db";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.SCL)
                            {
                                ext = "scl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.KOP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.FUP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.AWL)
                            {
                                ext = "awl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockType == PLCBlockType.UDT)
                            {
                                ext = "udt";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            var file    = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + "." + ext);
                            var xmlfile = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + ".xml");

                            var                 xmlValid = false;
                            XmlDocument         xmlDoc   = new XmlDocument();
                            XmlNamespaceManager ns       = new XmlNamespaceManager(xmlDoc.NameTable);
                            ns.AddNamespace("smns", "http://www.siemens.com/automation/Openness/SW/NetworkSource/FlgNet/v3");
                            ns.AddNamespace("smns2", "http://www.siemens.com/automation/Openness/SW/Interface/v3");

                            try
                            {
                                xmlDoc.LoadXml(src);
                                xmlValid = true;
                            }
                            catch
                            {
                                xmlValid = false;
                            }

                            if (xmlValid)
                            {
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//Created");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//CodeModifiedDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//CompileDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//CreationDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//InterfaceModifiedDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//ModifiedDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//ParameterModified");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//StructureModified");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//smns:DateAttribute[@Name='ParameterModifiedTS']", ns);
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        node.ParentNode.RemoveChild(node);
                                    }
                                }
                                catch
                                {
                                }

                                //try
                                //{
                                //    var nodes = xmlDoc.SelectNodes("//smns:Address[@Area='None' and @Informative='true']", ns);
                                //    foreach (var node in nodes.Cast<XmlNode>())
                                //    {
                                //        node.ParentNode.RemoveChild(node);
                                //    }
                                //}
                                //catch
                                //{
                                //}

                                //try
                                //{
                                //    var nodes = xmlDoc.SelectNodes("//smns2:IntegerAttribute[@Name='Offset' and @Informative='true']", ns);
                                //    foreach (var node in nodes.Cast<XmlNode>())
                                //    {
                                //        node.ParentNode.RemoveChild(node);
                                //    }
                                //}
                                //catch
                                //{
                                //}

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//*[@Informative='true']");
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        node.ParentNode.RemoveChild(node);
                                    }
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//*[local-name()='InstanceOfNumber']");
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        node.ParentNode.RemoveChild(node);
                                    }
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//*[local-name()='LibraryConformanceStatus']");
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        node.ParentNode.RemoveChild(node);
                                    }
                                }
                                catch
                                {
                                }

                                if (resetSetpoints)
                                {
                                    try
                                    {
                                        var nodes = xmlDoc.SelectNodes("//smns2:BooleanAttribute[@Name='SetPoint']", ns);
                                        foreach (var node in nodes.Cast <XmlNode>())
                                        {
                                            node.InnerText = "false";
                                        }
                                    }
                                    catch
                                    {
                                    }
                                }

                                StringBuilder     sb       = new StringBuilder();
                                XmlWriterSettings settings = new XmlWriterSettings
                                {
                                    Indent          = true,
                                    IndentChars     = "  ",
                                    NewLineChars    = "\r\n",
                                    NewLineHandling = NewLineHandling.Replace
                                };
                                using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                {
                                    xmlDoc.Save(writer);
                                }
                                src = sb.ToString();
                            }

                            if (src != null && ext != "db")
                            {
                                Directory.CreateDirectory(path);
                                File.WriteAllText(file, src, new UTF8Encoding(true));
                            }

                            if (xml != null)
                            {
                                var                 xmlValid2 = false;
                                XmlDocument         xmlDoc2   = new XmlDocument();
                                XmlNamespaceManager ns2       = new XmlNamespaceManager(xmlDoc2.NameTable);
                                ns2.AddNamespace("smns", "http://www.siemens.com/automation/Openness/SW/NetworkSource/FlgNet/v3");
                                ns2.AddNamespace("smns2", "http://www.siemens.com/automation/Openness/SW/Interface/v3");

                                try
                                {
                                    xmlDoc2.LoadXml(xml);
                                    xmlValid2 = true;
                                }
                                catch
                                {
                                    xmlValid2 = false;
                                }

                                if (xmlValid2)
                                {
                                    if (!removeNoBlanks)
                                    {
                                        try
                                        {
                                            XmlNodeList nodes = xmlDoc2.GetElementsByTagName("MultiLanguageText");

                                            var pattern = "^( *)(.*)";

                                            foreach (var n in nodes.Cast <XmlNode>())
                                            {
                                                if (removeOnlyOneBlank)
                                                {
                                                    n.InnerText = Regex.Replace(n.InnerText, pattern, m => m.Groups[1].Value.Substring(0, m.Groups[1].Value.Length - 1) + m.Groups[2].Value);
                                                }
                                                else if (removeAllBlanks)
                                                {
                                                    n.InnerXml = Regex.Replace(n.InnerXml, pattern, m => "" + m.Groups[2].Value);
                                                }
                                            }
                                        }
                                        catch
                                        { }
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//Created");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//DocumentInfo");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//CodeModifiedDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//CompileDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//CreationDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//InterfaceModifiedDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//ModifiedDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//ParameterModified");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//StructureModified");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    if (removeCodeFromXml && !xml.Contains("$$GITHANDLER-KEEPCODE$$"))
                                    {
                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//SW.Blocks.CompileUnit");
                                            var node  = nodes[0];
                                            node.InnerXml = "";
                                            var parent = node.ParentNode;
                                            foreach (var nd in nodes.Cast <XmlNode>().Skip(1).ToList())
                                            {
                                                parent.RemoveChild(nd);
                                            }
                                        }
                                        catch
                                        { }
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//smns:DateAttribute[@Name='ParameterModifiedTS']", ns2);
                                        foreach (var node in nodes.Cast <XmlNode>())
                                        {
                                            node.ParentNode.RemoveChild(node);
                                        }
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//*[@Informative='true']");
                                        foreach (var node in nodes.Cast <XmlNode>())
                                        {
                                            node.ParentNode.RemoveChild(node);
                                        }
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//*[local-name()='LibraryConformanceStatus']");
                                        foreach (var node in nodes.Cast <XmlNode>())
                                        {
                                            node.ParentNode.RemoveChild(node);
                                        }
                                    }
                                    catch
                                    {
                                    }

                                    if (projectBlockInfo.BlockLanguage == PLCLanguage.DB && projectBlockInfo.BlockType == PLCBlockType.DB && projectBlockInfo.IsInstance)
                                    {
                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//*[local-name()='Interface']/*[local-name()='Sections']/*[local-name()='Section']/*[local-name()='Member']");
                                            foreach (var node in nodes.Cast <XmlNode>())
                                            {
                                                node.ParentNode.RemoveChild(node);
                                            }
                                        }
                                        catch
                                        {
                                        }

                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//*[local-name()='InstanceOfNumber']");
                                            foreach (var node in nodes.Cast <XmlNode>())
                                            {
                                                node.ParentNode.RemoveChild(node);
                                            }
                                        }
                                        catch
                                        {
                                        }
                                    }

                                    if (resetSetpoints)
                                    {
                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//smns2:BooleanAttribute[@Name='SetPoint']", ns2);
                                            foreach (var node in nodes.Cast <XmlNode>())
                                            {
                                                node.InnerText = "false";
                                            }
                                        }
                                        catch
                                        {
                                        }
                                    }

                                    StringBuilder     sb       = new StringBuilder();
                                    XmlWriterSettings settings = new XmlWriterSettings
                                    {
                                        Indent          = true,
                                        IndentChars     = "  ",
                                        NewLineChars    = "\r\n",
                                        NewLineHandling = NewLineHandling.Replace
                                    };
                                    using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                    {
                                        xmlDoc2.Save(writer);
                                    }

                                    xml = sb.ToString();

                                    if (_projectType == ProjectType.Tia14SP1)
                                    {
                                        xml = xml.Replace("<ProgrammingLanguage>SCL</ProgrammingLanguage>", "<ProgrammingLanguage>STL</ProgrammingLanguage>");
                                    }
                                }

                                Directory.CreateDirectory(path);
                                File.WriteAllText(xmlfile, xml, new UTF8Encoding(true));
                            }
                        }
                        else
                        {
                            Console.WriteLine("Skipping Block (null)" + projectBlockInfo.Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Skipping Block: \"" + projectBlockInfo.Name + "\" Exception: " + ex.Message);
                        skippedBlocksList.Add(projectBlockInfo.Name);
                    }
                }
            }
            else if (folder is ITIAVarTabFolder varTabfld)
            {
                foreach (var varTab in varTabfld.TagTables)
                {
                    var         xmlValid = false;
                    string      xml      = null;
                    XmlDocument xmlDoc   = new XmlDocument();

                    var file = Path.Combine(path, varTab.Name.Replace("\\", "_").Replace("/", "_") + ".xml");
                    try
                    {
                        var vt = varTab.Export();
                        try
                        {
                            xmlDoc.LoadXml(vt);
                            xmlValid = true;
                        }
                        catch
                        {
                            xmlValid = false;
                        }

                        if (xmlValid)
                        {
                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//Created");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }

                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }
                        }

                        StringBuilder     sb       = new StringBuilder();
                        XmlWriterSettings settings = new XmlWriterSettings
                        {
                            Indent          = true,
                            IndentChars     = "  ",
                            NewLineChars    = "\r\n",
                            NewLineHandling = NewLineHandling.Replace
                        };
                        using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                        {
                            xmlDoc.Save(writer);
                        }

                        xml = sb.ToString();

                        Directory.CreateDirectory(path);
                        File.WriteAllText(file, xml, new UTF8Encoding(true));
                    }
                    catch
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(file + " could not be exported");
                        Console.ForegroundColor = ConsoleColor.White;
                    }
                }
            }
            else if (folder is ITIAWatchAndForceTablesFolder wtfFld)
            {
                foreach (var varTab in wtfFld.WatchTables)
                {
                    var         xmlValid = false;
                    string      xml      = null;
                    XmlDocument xmlDoc   = new XmlDocument();

                    var file = Path.Combine(path, varTab.Name.Replace("\\", "_").Replace("/", "_") + ".watch");

                    try
                    {
                        var vt = varTab.Export();
                        try
                        {
                            xmlDoc.LoadXml(vt);
                            xmlValid = true;
                        }
                        catch
                        {
                            xmlValid = false;
                        }

                        if (xmlValid)
                        {
                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//Created");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }

                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }
                        }

                        StringBuilder     sb       = new StringBuilder();
                        XmlWriterSettings settings = new XmlWriterSettings
                        {
                            Indent          = true,
                            IndentChars     = "  ",
                            NewLineChars    = "\r\n",
                            NewLineHandling = NewLineHandling.Replace
                        };
                        using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                        {
                            xmlDoc.Save(writer);
                        }

                        xml = sb.ToString();
                        Directory.CreateDirectory(path);
                        File.WriteAllText(file, xml, new UTF8Encoding(true));
                    }
                    catch
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(file + " could not be exported");
                        Console.ForegroundColor = ConsoleColor.White;
                    }
                }
                foreach (var varTab in wtfFld.ForceTables)
                {
                    var         xmlValid = false;
                    string      xml      = null;
                    XmlDocument xmlDoc   = new XmlDocument();

                    var file = Path.Combine(path, varTab.Name.Replace("\\", "_").Replace("/", "_") + ".force");

                    try
                    {
                        var vt = varTab.Export();

                        try
                        {
                            xmlDoc.LoadXml(vt);
                            xmlValid = true;
                        }
                        catch
                        {
                            xmlValid = false;
                        }

                        if (xmlValid)
                        {
                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//Created");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }

                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }
                        }

                        StringBuilder     sb       = new StringBuilder();
                        XmlWriterSettings settings = new XmlWriterSettings
                        {
                            Indent          = true,
                            IndentChars     = "  ",
                            NewLineChars    = "\r\n",
                            NewLineHandling = NewLineHandling.Replace
                        };
                        using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                        {
                            xmlDoc.Save(writer);
                        }

                        xml = sb.ToString();
                        Directory.CreateDirectory(path);
                        File.WriteAllText(file, xml, new UTF8Encoding(true));
                    }
                    catch (Exception e)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(file + " could not be exported");
                        Console.ForegroundColor = ConsoleColor.White;
                    }
                }
            }
        }
        /// <summary>
        /// Exports current activity to TCX.
        /// </summary>
        private async void ExportToTcx()
        {
            if (Activity != null)
            {
                XDocument loTCX = null;
                try
                {
                    // Export Activity without force (if no MapPoints or GPSLocation, raises exception)
                    loTCX = Activity.ToTCX("XportBand");
                }
                catch (ArgumentNullException loArgumentNullException)
                {
                    loTCX = null;
                    // Check if exception was raised because of missing MapPoints/GPSLocation data
                    if (!string.IsNullOrEmpty(loArgumentNullException.ParamName) &&
                        loArgumentNullException.ParamName.Equals("MapPoints", StringComparison.OrdinalIgnoreCase))
                    {
                        // Ask user to confirm
                        await moDialogService.ShowMessage(Resources.Strings.MessageContentExportEmptyGPSData,
                                                          Resources.Strings.MessageTitleExportTCX,
                                                          Resources.Strings.MessageButtonYes,
                                                          Resources.Strings.MessageButtonNo,
                                                          (confirm) =>
                                                          {
                                                              if (confirm)
                                                              {
                                                                  loTCX = Activity.ToTCX("XportBand", confirm);
                                                              }
                                                          });
                    }
                    else
                    {
                        // Handle exceptions (just for debugging purposes). TODO: Delete this code
                        if (System.Diagnostics.Debugger.IsAttached)
                        {
                            System.Diagnostics.Debug.WriteLine(loArgumentNullException.StackTrace);
                            System.Diagnostics.Debugger.Break();
                        } // Handle exceptions (just for debugging purposes)
                        await moDialogService.ShowError(Resources.Strings.MessageContentErrorOperation,
                                                        Resources.Strings.MessageTitleExportTCX,
                                                        Resources.Strings.MessageButtonOK,
                                                        null);
                    }
                }
                catch (Exception loException)
                {
                    // Handle exceptions (just for debugging purposes). TODO: Delete this code
                    if (System.Diagnostics.Debugger.IsAttached)
                    {
                        System.Diagnostics.Debug.WriteLine(loException.StackTrace);
                        System.Diagnostics.Debugger.Break();
                    } // Handle exceptions (just for debugging purposes)
                    loTCX = null;
                    await moDialogService.ShowError(Resources.Strings.MessageContentErrorOperation,
                                                    Resources.Strings.MessageTitleExportTCX,
                                                    Resources.Strings.MessageButtonOK,
                                                    null);
                }

                // Check TCX (XML formatted document)
                if (loTCX != null)
                {
                    // Convert XML formatted document to string
                    string lsTCX = null;
                    StringBuilder loStringBuilder = new StringBuilder();
                    using (TextWriter loTextWriter = new EncodingStringWriter(loStringBuilder, new UTF8Encoding(false)))
                    {
                        loTCX.Save(loTextWriter);
                        lsTCX = loStringBuilder.ToString();
                    }
                    // Ask user for file destination
                    FileSavePicker loFileSavePicker = new FileSavePicker();
                    //loFileSavePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
                    loFileSavePicker.FileTypeChoices.Add("TCX", new List<string>() { ".tcx" });
                    loFileSavePicker.SuggestedFileName = string.Format("XportBand{0}{1:yyyyMMddHHmmss}", Activity.Type, Activity.StartTime);
                    StorageFile loStorageFile = await loFileSavePicker.PickSaveFileAsync();
                    if (loStorageFile != null)
                    {
                        // Save file
                        CachedFileManager.DeferUpdates(loStorageFile);
                        await FileIO.WriteTextAsync(loStorageFile, lsTCX);
                        Windows.Storage.Provider.FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(loStorageFile);
                        if (status == Windows.Storage.Provider.FileUpdateStatus.Complete)
                        {
                            await moDialogService.ShowMessage(string.Format(Resources.Strings.MessageContentActivityExportSuccess, loStorageFile.Name),
                                                              Resources.Strings.MessageTitleExportTCX);
                        }
                        else
                        {
                            await moDialogService.ShowError(string.Format(Resources.Strings.MessageContentActivityExportFail, loStorageFile.Name),
                                                            Resources.Strings.MessageTitleExportTCX,
                                                            Resources.Strings.MessageButtonOK,
                                                            null);
                        }
                    }
                }
            }
        }