Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Problem with the recursion logic
Message
 
 
To
All
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Title:
Problem with the recursion logic
Environment versions
Environment:
C# 4.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Miscellaneous
Thread ID:
01567554
Message ID:
01567554
Views:
57
Hi everybody,

I am trying to create an output using recursive logic. My problem is that I only get the first element value and I am not seeing where is a whole in my implementation. Can someone help here, please?

UPDATE. My most current implementation right now is this and it is still wrong
/// <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 use 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);
         }
      }      }
My problem (I think) now is that I do not get the empty string after first tag (Changed) that has empty element. At least my test is still failing although I am now getting very close to the desired output.
If it's not broken, fix it until it is.


My Blog
Next
Reply
Map
View

Click here to load this message in the networking platform