c# - problem parsing with XMLReader (using ReadSubTree) -


im trying build simple xml controls parser in cf application. in code below string im trying parse looks this:

"<panel><label>text1</label><label>text2</label></panel>" 

the result want code panel 2 labels. problem when first label parsed subreader.read() returns false in parsepanelelementh method, , falls out of while statement. since im new xmlreader must missing simple. apreciated !

peace.

static class xmlparser {     public static control parse(string axmlstring)     {         xmlreader reader = xmlreader.create(new stringreader(axmlstring));         return parsexml(reader);     }      public static control parsexml(xmlreader reader)     {         using (reader)         {             while (reader.read())             {                 if (reader.nodetype == xmlnodetype.element)                 {                     if (reader.localname == "panel")                     {                         return parsepanelelement(reader);                     }                      if (reader.localname == "label")                     {                         return parselabelelement(reader);                     }                 }             }         }         return null;     }      private static control parsepanelelement(xmlreader reader)     {         var mypanel = new panel();         xmlreader subreader = reader.readsubtree();         while (subreader.read())         {             control subcontrol = parsexml(subreader);             if (subcontrol != null)             {                 mypanel.controls.add(subcontrol);             };         }         return mypanel;     }      private static control parselabelelement(xmlreader reader)     {         reader.read();         var mystring = reader.value string;         var mylabel = new label();         mylabel.text = mystring;         return mylabel;     } } 

the problem reader reads twice, once in parsepanelelement , once in parsexml. way parse panel, skip first label , add second label.

[edit may 3rd 2010]

this code works under visual studio 9. (i have moved using clause)

   static class program    {       /// <summary>       /// main entry point application.       /// </summary>       [stathread]       static void main()       {          control test = xmlparser.parse("<panel><label>text1</label><label>text2</label></panel>");          (int32 = 0; < test.controls.count; i++)          {             system.diagnostics.debug.writeline("control " + + ": " + test.controls[i].gettype().fullname + " [text = " + test.controls[i].text + "]");          }       }        static class xmlparser       {          public static control parse(string axmlstring)          {             control result = null;             using (stringreader strreader = new stringreader(axmlstring))             {                using (xmlreader reader = xmlreader.create(strreader))                {                   result = parsexml(reader);                }             }             return result;          }           public static control parsexml(xmlreader reader)          {             while (reader.read())             {                if (reader.nodetype == xmlnodetype.element)                {                   if (reader.localname == "panel")                   {                      return parsepanelelement(reader);                   }                    if (reader.localname == "label")                   {                      return parselabelelement(reader);                   }                }             }             return null;          }           private static control parsepanelelement(xmlreader reader)          {             var mypanel = new panel();             using (xmlreader subreader = reader.readsubtree())             {                while (subreader.read())                {                   control subcontrol = parsexml(subreader);                   if (subcontrol != null)                   {                      mypanel.controls.add(subcontrol);                   };                }             }             return mypanel;          }           private static control parselabelelement(xmlreader reader)          {             reader.read();             var mystring = reader.value string;             var mylabel = new label();             mylabel.text = mystring;             return mylabel;          }       }    } 

Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -