public void Convert() { if (string.IsNullOrEmpty(inputDirectory)) { Log("No input directory has been specified!"); return; } if (!InitializeOutput()) { ConversionComplete?.Invoke(); return; } try { string[] xmlFiles = Directory.GetFiles(inputDirectory, "*.xml"); if (xmlFiles.Length == 0) { Log("No XML files found in input directory."); } foreach (var xmlFile in xmlFiles) { FileInfo fileInfo = new FileInfo(xmlFile); XmlDocument xmlDoc = null; Log("---------------------------------------------\r\nReading XML file: " + fileInfo.Name); try { xmlDoc = new XmlDocument(); xmlDoc.Load(xmlFile); } catch (Exception ex) { Log(String.Format("The file {0} is not properly formatted and can't be parsed: {1}", fileInfo.Name, ex.Message)); continue; } XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable); foreach (var configNamespace in config.Namespace) { nsManager.AddNamespace(configNamespace.Prefix, configNamespace.Uri); } try { ProcessFile(xmlDoc, nsManager, fileInfo); Log(string.Format("Done parsing/processing file {0}", fileInfo.Name)); } catch (Exception ex) { Log(String.Format("Failed to process file {0} data due to: {1}", fileInfo.Name, ex.Message)); continue; } try { // Always run Validate(). If not configured with validation schema and/or schematron, it will just return "valid" bool isSchemaValid = validator.ValidateSchema(xmlFile); bool isSchematronValid = validator.ValidateSchematron(xmlFile); if (validator.WillValidate) { Log("Validation results:"); if (validator.WillValidateSchema) { Log(string.Format("Schema (XSD): {0}", isSchemaValid ? "valid" : "not valid")); } else { Log("Schema (XSD): n/a"); } if (validator.WillValidateSchematron) { Log(string.Format("Schematron (SCH): {0}", isSchematronValid ? "valid" : "not valid")); } else { Log("Schematron (SCH): n/a"); } } if (!String.IsNullOrEmpty(moveDirectory)) { DirectoryInfo di = new DirectoryInfo(moveDirectory); if (!di.Exists) { di.Create(); } string destinationFilePath = Path.Combine(moveDirectory, fileInfo.Name); // If configured to validate, move the file to a subdirectory "valid" or "invalid" depending on the validation results if (validator.WillValidate) { destinationFilePath = Path.Combine(destinationFilePath, isSchemaValid ? "valid" : "invalid"); } fileInfo.MoveTo(destinationFilePath); Console.WriteLine("Moved file to " + destinationFilePath); } } catch (Exception ex) { Log(String.Format("Failed to validate and/or move file {0} data due to: {1}", fileInfo.Name, ex.Message)); continue; } } } catch (Exception ex) { Log("Failed to process files data due to: " + ex.Message); } finally { FinalizeOutput(); ConversionComplete?.Invoke(); } }
private static void OnConversionCompleted(ConversionEventArgs e) { ConversionComplete?.Invoke(e); }
private void RaiseConversionComplete(IList <VectorXaml> convertedObjects) { ConversionComplete?.Invoke(this, new ConversionEventArgs(convertedObjects)); }