public void format(Presentater p) { using (XmlReader xr = XmlReader.Create(new StringReader(this.xmls))) { xr.ReadToFollowing(_xml_tag); while (xr.Read()) { if (xr.NodeType == XmlNodeType.Element) { switch (xr.Name) { case HEADER: p.startHeader(); break; case LINE: p.startLine(); break; case SPACER: p.startSpacer(); break; case COLOR: p.startColor(xr.GetAttribute(_xml_ColorValue_attr)); break; case BULLET: p.startBullet(); break; case PRE: p.startPre(); break; default: Util.Assert(false); break; } } else if (xr.NodeType == XmlNodeType.EndElement) { switch (xr.Name) { case _xml_tag: break; case HEADER: p.endHeader(); break; case LINE: p.endLine(); break; case SPACER: p.endSpacer(); break; case COLOR: p.endColor(); break; case BULLET: p.endBullet(); break; case PRE: p.endPre(); break; default: Util.Assert(false); break; } } else if (xr.NodeType == XmlNodeType.Text) { p.doText(xr.Value); } } } }