public Program(params string[] args) { XmlSchemas xsds = new XmlSchemas(); var i = 0; while (!args[i].StartsWith("/o:") || i >= args.Length) { xsds.Add(GetSchema(args[i])); i++; } var output = string.Empty; if (args[i].StartsWith("/o:")) { output = args[i].Substring(3); } xsds.Compile(null, true); XmlSchemaImporter schemaImporter = new XmlSchemaImporter(xsds); // create the codedom var codeNamespace = new CodeNamespace("QbSync.QbXml.Objects"); codeNamespace.Imports.Add(new CodeNamespaceImport("System")); codeNamespace.Imports.Add(new CodeNamespaceImport("System.Collections.Generic")); codeNamespace.Imports.Add(new CodeNamespaceImport("System.Linq")); CodeCompileUnit compileUnit = new CodeCompileUnit(); compileUnit.Namespaces.Add(codeNamespace); var codeExporter = new XmlCodeExporter(codeNamespace, compileUnit, CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateOrder); foreach (XmlSchema xsd in xsds) { ArrayList maps = new ArrayList(); foreach (XmlSchemaType schemaType in xsd.SchemaTypes.Values) { maps.Add(schemaImporter.ImportSchemaType(schemaType.QualifiedName)); } foreach (XmlSchemaElement schemaElement in xsd.Elements.Values) { maps.Add(schemaImporter.ImportTypeMapping(schemaElement.QualifiedName)); } foreach (XmlTypeMapping map in maps) { codeExporter.ExportTypeMapping(map); } } var typeEnhancer = new TypeEnhancer(codeNamespace, xsds); typeEnhancer.Enhance(); // Add a comment at the top of the file var x = fileComment.Split('\n').Select(m => new CodeCommentStatement(m)).ToArray(); codeNamespace.Comments.AddRange(x); // Check for invalid characters in identifiers CodeGenerator.ValidateIdentifiers(codeNamespace); // output the C# code CSharpCodeProvider codeProvider = new CSharpCodeProvider(); var options = new CodeGeneratorOptions { BlankLinesBetweenMembers = true, BracingStyle = "C", ElseOnClosing = true, IndentString = " " }; using (StringWriter writer = new StringWriter()) { codeProvider.GenerateCodeFromCompileUnit( new CodeSnippetCompileUnit("#pragma warning disable 1591"), writer, options); codeProvider.GenerateCodeFromNamespace(codeNamespace, writer, options); codeProvider.GenerateCodeFromCompileUnit( new CodeSnippetCompileUnit("#pragma warning restore 1591"), writer, options); string content = writer.GetStringBuilder().ToString(); if (string.IsNullOrEmpty(output)) { Console.WriteLine(content); Console.ReadLine(); } else { File.WriteAllText(output, content); } } }
public Program(params string[] args) { XmlSchemas xsds = new XmlSchemas(); var i = 0; while (!args[i].StartsWith("/o:") || i >= args.Length) { xsds.Add(GetSchema(args[i])); i++; } var output = string.Empty; if (args[i].StartsWith("/o:")) { output = args[i].Substring(3); } xsds.Compile(null, true); XmlSchemaImporter schemaImporter = new XmlSchemaImporter(xsds, CodeGenerationOptions.GenerateOrder, null); // create the codedom var codeNamespace = new CodeNamespace("QbSync.QbXml.Objects"); codeNamespace.Imports.Add(new CodeNamespaceImport("System")); codeNamespace.Imports.Add(new CodeNamespaceImport("System.Collections.Generic")); codeNamespace.Imports.Add(new CodeNamespaceImport("System.Linq")); CodeCompileUnit compileUnit = new CodeCompileUnit(); compileUnit.Namespaces.Add(codeNamespace); var codeExporter = new XmlCodeExporter(codeNamespace, compileUnit, CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateOrder); foreach (XmlSchema xsd in xsds) { ArrayList maps = new ArrayList(); foreach (XmlSchemaType schemaType in xsd.SchemaTypes.Values) { maps.Add(schemaImporter.ImportSchemaType(schemaType.QualifiedName)); } foreach (XmlSchemaElement schemaElement in xsd.Elements.Values) { maps.Add(schemaImporter.ImportTypeMapping(schemaElement.QualifiedName)); } foreach (XmlTypeMapping map in maps) { codeExporter.ExportTypeMapping(map); } } var typeEnhancer = new TypeEnhancer(codeNamespace, xsds); typeEnhancer.Enhance(); // Add a comment at the top of the file var x = fileComment.Split('\n').Select(m => new CodeCommentStatement(m)).ToArray(); codeNamespace.Comments.AddRange(x); // Check for invalid characters in identifiers CodeGenerator.ValidateIdentifiers(codeNamespace); // output the C# code CSharpCodeProvider codeProvider = new CSharpCodeProvider(); using (StringWriter writer = new StringWriter()) { codeProvider.GenerateCodeFromNamespace(codeNamespace, writer, new CodeGeneratorOptions { BlankLinesBetweenMembers = true, BracingStyle = "C", ElseOnClosing = true, IndentString = " " }); string content = writer.GetStringBuilder().ToString(); if (string.IsNullOrEmpty(output)) { Console.WriteLine(content); Console.ReadLine(); } else { File.WriteAllText(output, content); } } }