Regex regexXml = new Regex(@"\<(?'field'[^/].*?)\>(?'data'.*?)\</\k'field'\>"); MatchCollection matches = regexXml.Matches(tcSQML);What we want is to parse a string like this
String input = "<func>GetResLog</func><tcOperator>ADMIN</tcOperator><tcSalespoint>TICKETS</tcSalespoint><tnReservNo>1001001</tnReservNo><tcReturnType>DSP</tcReturnType>";into a dictionary of String, String where key represents the parameter's name and the value represents the value.
String input = @"<func>getqtyremaining</func><tcoperator>ADMIN</tcoperator><tcreturntype>XML</tcreturntype> <tcsalespoint>TICKET004001</tcsalespoint><ttdatetime>03/11/2013 01:19 PM</ttdatetime> <TCDCILIST><DCI>ACTIVITIESSKYDIVING 1000 </DCI><DCI>ACTIVITIESSKYDIVING 1030 </DCI> <DCI>ACTIVITIESSKYDIVING 1100 </DCI><DCI>ACTIVITIESSKYDIVING 1130 </DCI><DCI>ACTIVITIESSKYDIVING 1200 </DCI> <DCI>ACTIVITIESSKYDIVING 1230 </DCI><DCI>ACTIVITIESSKYDIVING 1300 </DCI><DCI>ACTIVITIESSKYDIVING 1330 </DCI> <DCI>ACTIVITIESSKYDIVING 1400 </DCI><DCI>ACTIVITIESSKYDIVING 1430 </DCI></TCDCILIST>";The whole current method is this
public static void PopulateFromSQML(this Dictionary<String, String> tDictionary, String tcSQML) { Regex regexXml = new Regex(@"\<(?'field'[^/].*?)\>(?'data'.*?)\</\k'field'\>"); MatchCollection matches = regexXml.Matches(tcSQML); foreach (Match m in matches) { try { if (!tDictionary.ContainsKey(m.Groups["field"].ToString())) tDictionary.Add(m.Groups["field"].ToString(), m.Groups["data"].ToString()); } catch (Exception) { // Don't care } } }Do you see what can I change in that method to be able to properly handle such strings?