Я пытаюсь создать простой анализатор XML to Controls в моем CF-приложении.
В приведенном ниже коде строка, которую я пытаюсь проанализировать, выглядит следующим образом:
"<Panel><Label>Text1</Label><Label>Text2</Label></Panel>"
Результат, который я хочу получить с этим кодом, будет Панель с двумя метками.
Но проблема в том, что когда первая метка анализируется, subreader.Read () возвращает false в методе ParsePanelElementh, поэтому он выпадает из оператора while.
Так как я новичок в XMLReader, я должен упустить что-то очень простое.
Любая помощь будет оценена!
мир.
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 as string;
var myLabel = new Label();
myLabel.Text = myString;
return myLabel;
}
}