>/// <summary> > /// Formats a single element > /// </summary> > /// <param name="xe"></param> > /// <param name="level"></param> > /// <returns></returns> > public String FormatSingleXmlElement(XElement xe, Int32 level = 0) > { > String result = ""; > String elementValue = ""; > String tagName = xe.Name.ToString(); > if (!xe.IsEmpty) > { > elementValue = xe.Value; > > if (!elementValue.IsValueEmpty()) > { > if ("CC_SWIPE" == tagName.ToUpper()) > { > { > Int32 cardLength = elementValue.Length; > String mask = new String('X', cardLength - 4); > String maskedCardNumber = String.Format("{0}{1}", mask, elementValue.Substring(cardLength - 4)); > result = "".PadRight(level) + (tagName + ":").PadRight(15) + maskedCardNumber; > } > } > else > { > if (200 < elementValue.Length) > elementValue = elementValue.Left(200) + "..."; > result = "".PadRight(level) + (tagName + ":").PadRight(15) + elementValue; > } > } > } > return result; > } > > /// <summary> > /// Based on the element either processes the current element or uses recursion > /// </summary> > /// <param name="element"></param> > /// <param name="level"></param> > /// <returns></returns> > public String XmlToString(XElement element, Int32 level = 0) > { > StringBuilder output = new StringBuilder(); > String tagName = element.Name.ToString(); > String result = ""; > if (element.HasElements) > { > output.AppendLine("".PadRight(level) + (tagName + ":").PadRight(15)); > foreach (XNode xn in element.Nodes()) > { > result = XmlToString((XElement)xn, level + 1); > if (!String.IsNullOrWhiteSpace(result)) > output.AppendLine(result); > } > } > else > { > return FormatSingleXmlElement(element, level); > } > > return output.ToString(); > } > > /// <summary> > /// Formats XML into a string > /// </summary> > /// <param name="input"></param> > /// <param name="level"></param> > /// <returns></returns> > public String XmlDisplay(String input, Int32 level = 0) > { > try > { > if (0 == level) > { > String rootNode = "DummyNode"; > input = String.Format("<{0}>{1}</{0}>", rootNode, input); > } > if (level > 5) > return ""; // don't create infinite loop > > XElement elements = XElement.Parse(input); > StringBuilder output = new StringBuilder(); > > foreach (XElement xe in elements.Elements()) > { > output.Append(XmlToString(xe, level)); > } > return output.ToString(); > } > catch (Exception ex) > { > String error = ex.Message.ToString(); > Logging.Log(error, 1); > return String.Format("<ERR>0</ERR><STATUSCODE>100</STATUSCODE><MSG>{0}</MSG>", error); > } > } >>