public string Run(string input, int startAt = 0) { Match match = xpoMatch.Match(input, startAt); if (match.Success) { string xml = match.Value; if (xml.Contains("<Value>") && xml.Contains("<Field>")) { // <AxQuerySimpleDataSourceRange> // <Name>NamedCategoryHierarchyRoleRetail</Name> // <Field>NamedCategoryHierarchyRole</Field> // <Value>4</Value> // </AxQuerySimpleDataSourceRange> string value = MetaData.extractFromXML(xml, "//AxQuerySimpleDataSourceRange/Value"); if (value.IndexOfAny(matchChars) != -1 && !value.Contains("(") && !value.Contains(">") && !value.Contains("<") && !value.Contains("..") && !value.Contains("!")) { string fieldName = MetaData.extractFromXML(xml, "//AxQuerySimpleDataSourceRange/Field"); string rangeName = MetaData.extractFromXML(xml, "//AxQuerySimpleDataSourceRange/Name"); string tableName = MetaData.getTableNameFromQueryRange(input, rangeName); if (tableName == String.Empty) { Debug.WriteLine(string.Format("{0} has unknown table range {1} with value {2} on field {3}", Scanner.FILENAME, rangeName, value, fieldName)); } string enumName = MetaData.getEnumFromTable(tableName, fieldName); if (enumName != String.Empty && enumName.ToLowerInvariant() != "Boolean".ToLowerInvariant() && enumName.ToLowerInvariant() != "NoYes".ToLowerInvariant() && enumName.ToLowerInvariant() != "NoYesId".ToLowerInvariant()) { string symbols = string.Empty; foreach (var v in value.Split(',')) { string symbol = MetaData.getSymbolFromEnum(enumName, v.Trim()); if (symbol == string.Empty) { // Debug.WriteLine(string.Format("{0} is referencing unknown enum value. Enum={1} with value {2}", Scanner.FILENAME, enumName, v)); break; } Debug.WriteLine(string.Format("{0};{1};{2}", enumName, v, symbol)); if (symbols != string.Empty) { symbols += ", " + symbol; } else { symbols = symbol; } } if (symbols != "") { string originalText = match.Value; int startPos = originalText.IndexOf("<Value>"); int endPos = originalText.IndexOf("</Value>") + "</Value>".Length; string updatedText; updatedText = originalText.Remove(startPos, endPos - startPos); updatedText = updatedText.Insert(startPos, "<Value>" + symbols + "</Value>"); string updatedInput = input.Remove(match.Index, match.Length); updatedInput = updatedInput.Insert(match.Index, updatedText); Hits++; return(this.Run(updatedInput, match.Index + match.Length)); } else { //Debug.WriteLine(string.Format("{0} has integer based range {1} on enum {2} on field {3}.{4}", Scanner.FILENAME, value, enumName, tableName, fieldName)); // Debug.WriteLine(string.Format("{0};{1};{2};{3};{4}", Scanner.FILENAME, value, enumName, tableName, fieldName)); } } } } return(this.Run(input, match.Index + match.Length)); } return(input); }