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); }
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); }
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); }
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); }
public string Serialize(GpsData data) { var textWriter = new EncodingStringWriter(Encoding.UTF8); _xmlSerializer.Serialize(textWriter, SerializeInternal(data)); return(textWriter.ToString()); }
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()); }
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(); }
/// <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()); }
/// <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()); }
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()); }
/// <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()); }
/// <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> /// 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(); }
/// <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(); }
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(); }
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); }
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()); }
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); }
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()); } }
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; } }
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()); }
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")); }
/// <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()); }
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); }
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()); } }
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); }
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); } } } }
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); } } } }
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); } } } } }