From 13e375c14521e433fe6c585f24d6c2553ca07bdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominic=20H=C3=B6glinger?= Date: Thu, 23 Apr 2026 19:55:24 +0200 Subject: [PATCH] Add command line interface --- Program.cs | 45 +++++++++++++++++++++++++++++++-------------- XNeedle.csproj | 1 + 2 files changed, 32 insertions(+), 14 deletions(-) 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 @@ +