public void GenerateClasses ()
{
if (namesp == null) namesp = "Schemas";
if (uri == null) uri = "";
string targetFile = "";
XmlSchemas schemas = new XmlSchemas();
foreach (string fileName in schemaNames)
{
StreamReader sr = new StreamReader (fileName);
schemas.Add (XmlSchema.Read (sr, new ValidationEventHandler (HandleValidationError)));
sr.Close ();
if (targetFile == "") targetFile = Path.GetFileNameWithoutExtension (fileName);
else targetFile += "_" + Path.GetFileNameWithoutExtension (fileName);
}
targetFile += "." + provider.FileExtension;
CodeCompileUnit cunit = new CodeCompileUnit ();
CodeNamespace codeNamespace = new CodeNamespace (namesp);
cunit.Namespaces.Add (codeNamespace);
codeNamespace.Comments.Add (new CodeCommentStatement ("\nThis source code was auto-generated by MonoXSD\n"));
// Locate elements to generate
ArrayList qnames = new ArrayList ();
if (elements.Count > 0)
{
foreach (string name in elements)
qnames.Add (new XmlQualifiedName (name, uri));
}
else
{
foreach (XmlSchema schema in schemas) {
if (!schema.IsCompiled) schema.Compile (new ValidationEventHandler (HandleValidationError));
foreach (XmlSchemaElement el in schema.Elements.Values)
if (!qnames.Contains (el.QualifiedName))
qnames.Add (el.QualifiedName);
}
}
// Import schemas and generate the class model
XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
XmlCodeExporter sx = new XmlCodeExporter (codeNamespace, cunit);
ArrayList maps = new ArrayList();
foreach (XmlQualifiedName qname in qnames)
{
XmlTypeMapping tm = importer.ImportTypeMapping (qname);
if (tm != null) maps.Add (tm);
}
foreach (XmlTypeMapping tm in maps)
{
sx.ExportTypeMapping (tm);
}
// Generate the code
ICodeGenerator gen = provider.CreateGenerator();
string genFile = Path.Combine (outputDir, targetFile);
StreamWriter sw = new StreamWriter(genFile, false);
gen.GenerateCodeFromCompileUnit (cunit, sw, new CodeGeneratorOptions());
sw.Close();
Console.WriteLine ("Written file " + genFile);
}