// Dump text representation of baml file to console private static void DumpText(string filename) { // Load the baml file using the BamlReader and display its contents to the console. Stream fs = LoadTestFile(filename); Reader = new BamlReaderWrapper(fs); int depth = 0; while (Reader.Read()) { // Set depth and indent accordingly switch (Reader.NodeType) { case "StartElement": case "StartComplexProperty": case "StartConstructor": depth++; break; } Indent(depth); Console.Write(Reader.NodeType.ToString()); // Write additional information switch (Reader.NodeType) { case "StartElement": case "StartComplexProperty": case "StartConstructor": Console.Write(" "); WritePrefixedName(); break; case "EndElement": case "EndComplexProperty": case "EndConstructor": depth--; Console.Write(" "); WritePrefixedName(); break; case "LiteralContent": case "Text": Console.Write(" \"" + Reader.Value + "\""); break; case "PIMapping": Console.Write(" XmlNamespace=" + Reader.XmlNamespace + " ClrNamespace=" + Reader.ClrNamespace + " Assembly=" + Reader.AssemblyName); break; } Console.WriteLine(""); if (Reader.HasProperties) { Reader.MoveToFirstProperty(); do { Indent(depth + 2); Console.Write(Reader.NodeType.ToString()); Console.Write(" "); WritePrefixedName(); if (Verbose) { Console.WriteLine(" Value=" + Reader.Value); } else { Console.WriteLine(" = " + Reader.Value); } }while (Reader.MoveToNextProperty()); } } Reader.Close(); }
// Read in one baml file using BamlReader and write to another baml file using BamlWriter private static void DumpToNewBaml(string filename) { // Load the baml file using the BamlReader and display its contents to the console. Stream fs = LoadTestFile(filename); Reader = new BamlReaderWrapper(fs); string outFile = filename.Substring(0, filename.Length - 5) + "_.baml"; System.IO.Stream stream = File.OpenWrite(outFile); BamlWriterWrapper writer = new BamlWriterWrapper(stream); while (Reader.Read()) { switch (Reader.NodeType) { case "StartDocument": writer.WriteStartDocument(); break; case "EndDocument": writer.WriteEndDocument(); break; case "StartElement": writer.WriteStartElement(Reader.AssemblyName, Reader.Name, Reader.IsInjected, Reader.CreateUsingTypeConverter); break; case "StartComplexProperty": writer.WriteStartComplexProperty( Reader.AssemblyName, Reader.Name.Substring(0, Reader.Name.LastIndexOf('.')), Reader.LocalName); break; case "EndElement": writer.WriteEndElement(); break; case "EndComplexProperty": writer.WriteEndComplexProperty(); break; case "StartConstructor": writer.WriteStartConstructor(); break; case "EndConstructor": writer.WriteEndConstructor(); break; case "LiteralContent": writer.WriteLiteralContent(Reader.Value); break; case "IncludeReference": Console.Write(" \"" + Reader.Value + "\""); break; case "Text": writer.WriteText(Reader.Value, Reader.TypeConverterAssemblyName, Reader.TypeConverterName); break; case "Event": writer.WriteEvent(Reader.Name, Reader.Value); break; case "RoutedEvent": writer.WriteRoutedEvent( Reader.AssemblyName, Reader.Name.Substring(0, Reader.Name.LastIndexOf('.')), Reader.LocalName, Reader.Value); break; case "PIMapping": writer.WritePIMapping(Reader.XmlNamespace, Reader.ClrNamespace, Reader.AssemblyName); break; } if (Reader.HasProperties) { Reader.MoveToFirstProperty(); do { if (Reader.NodeType == "ConnectionId") { writer.WriteConnectionId(Reader.ConnectionId); } else if (Reader.NodeType == "Property") { writer.WriteProperty(Reader.AssemblyName, Reader.Name.Substring(0, Reader.Name.LastIndexOf('.')), Reader.LocalName, Reader.Value, Reader.AttributeUsage); } else if (Reader.NodeType == "DefAttribute") { writer.WriteDefAttribute(Reader.Name, Reader.Value); } else if (Reader.NodeType == "PresentationOptionsAttribute") { writer.WritePresentationOptionsAttribute(Reader.Name, Reader.Value); } else if (Reader.NodeType == "ContentProperty") { writer.WriteContentProperty(Reader.AssemblyName, Reader.Name.Substring(0, Reader.Name.LastIndexOf('.')), Reader.LocalName); } else { writer.WriteXmlnsProperty(Reader.LocalName, Reader.Value); } }while (Reader.MoveToNextProperty()); } } Reader.Close(); writer.Close(); }