Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Problem with the recursion logic
Message
 
 
À
Tous
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Titre:
Problem with the recursion logic
Versions des environnements
Environment:
C# 4.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Divers
Thread ID:
01567554
Message ID:
01567554
Vues:
58
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
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform