diff --git a/Program.cs b/Program.cs index 9a2e2d2..2ad603a 100644 --- a/Program.cs +++ b/Program.cs @@ -1,5 +1,7 @@ using System; using System.Xml; +using System.Xml.Linq; +using CommandLine; using Sprache; using XNeedle.Parser; using XNeedle.Parser.Elements; @@ -9,24 +11,39 @@ namespace XNeedle { class Program { - static void Main() + public class Options { - var input = "$(\"//Device/Type[@ProductCode='#x0B583052' and @RevisionNo='#x00110000']\")"; + [Value(0, MetaName = "xn", Required = true, HelpText = "XN transformation definition")] + public string XnDefinition { get; set; } - var rule = (Rule)XnParser.RuleObject.Parse(input); + [Option('i', "input", HelpText = "Input XML file", Required = true)] + public string Input { get; set; } - XmlDocument doc = new XmlDocument(); - doc.Load("ELx9xx.xml"); + [Option('o', "output", HelpText = "Output XML file", Required = true)] + public string Output { get; set; } - rule.Transform(doc); - - XmlWriterSettings settings = new XmlWriterSettings(); - settings.Indent = true; - XmlWriter writer = XmlWriter.Create("El9xxFi.xml", settings); - - doc.WriteContentTo(writer); - - Console.WriteLine("Done."); + [Option('v', "verbose", Required = false, HelpText = "Set output to verbose messages.")] + public bool Verbose { get; set; } } + static void Main(string[] args) + { + CommandLine.Parser.Default.ParseArguments(args) + .WithParsed(RunOptions) + .WithNotParsed(HandleParseError); + } + + static void RunOptions(Options opts) + { + var masterRule = (Rule)XnParser.RuleObject.Parse(File.ReadAllText(opts.XnDefinition)); + var doc = new XmlDocument(); + doc.PreserveWhitespace = true; + doc.Load(opts.Input); + masterRule.Transform(doc); + doc.Save(opts.Output); + + Console.WriteLine($"Applied \"{opts.XnDefinition}\" to \"{opts.Input}\" and saved result to \"{opts.Output}\""); + } + + static void HandleParseError(IEnumerable errs) {} } } \ No newline at end of file diff --git a/XNeedle.csproj b/XNeedle.csproj index 2054cd1..9dce10b 100644 --- a/XNeedle.csproj +++ b/XNeedle.csproj @@ -8,6 +8,7 @@ +