using
System;
using
System.IO;
using
System.Xml;
using
System.Xml.Serialization;
using
System.Diagnostics;
using
System.Text.RegularExpressions;
public class ComandLineParser
{
public static void TestParse()
{
string[] args = {"/one:111", "/two:xxx", "/two:yyy",
"T H R E E", "/choice:Yes"};
StringWriter writer = new StringWriter();
XmlWriter xmlWriter = new XmlTextWriter(writer);
xmlWriter.WriteStartElement("Parsed");
foreach(string arg in args)
{
Match match = Regex.Match(arg, @"/(?<name>.+):(?<val>.+)");
if(match.Success)
{
string name = match.Groups["name"].Value;
string val = match.Groups["val"].Value;
xmlWriter.WriteElementString(name, val);
}
else { xmlWriter.WriteString(arg); }
}
xmlWriter.WriteEndElement();
StringReader reader =
new StringReader(writer.ToString()); XmlSerializer ser =
new XmlSerializer(typeof(Parsed)); Parsed parsed = (Parsed)ser.Deserialize(reader);
Debug.WriteLine(parsed, "_verbose");
Debug.Assert(parsed.one == 111);
Debug.Assert(parsed.two[0] == "xxx");
Debug.Assert(parsed.two[1] == "yyy");
Debug.Assert(parsed.three == "T H R E E");
Debug.Assert(parsed.choice == Choice.Yes);
}
public class Parsed {
[XmlElement]
public int one; [XmlElement]
public string[] two; [XmlText]
public string three; public Choice choice; }
public enum Choice { No, Yes }
}