void XmlView::Load(int parent, XmlParser& p) { if(p.IsTag()) { String tag = p.ReadTag(); String txt = tag; for(int i = 0; i < p.GetAttrCount(); i++) txt << ' ' << p.GetAttr(i) << "=\"" << p[i] << "\""; parent = xml.Add(parent, XmlImg::Tag(), tag, txt); while(!p.End()) { if(p.IsEof()) throw XmlError(""); Load(parent, p); } } else if(p.IsText()) xml.Add(parent, XmlImg::Text(), Null, NormalizeSpaces(p.ReadText())); else if(p.IsPI()) xml.Add(parent, XmlImg::PI(), Null, NormalizeSpaces(p.ReadPI())); else if(p.IsDecl()) xml.Add(parent, XmlImg::Decl(), Null, NormalizeSpaces(p.ReadDecl())); else if(p.IsComment()) xml.Add(parent, XmlImg::Comment(), Null, NormalizeSpaces(p.ReadComment())); else NEVER(); }
/** * parse primitve. this method parses the values, that are stored inside the Xml-document * handled by the XmlParser \p p. * @param p the parser holding the xml document * @return the Value contained in the xml document */ Value XmlRpcParser::ParsePrimitive(XmlParser& p) { Value v,vv; if(p.IsText()) { return Value(p.ReadText()); } for(int i=0;i<7;i++) { if(p.Tag(primitives[i])) { switch(i) { case 0: //string v=Value(p.ReadText()); break; case 1: //int case 2: //i4 v = Value(atoi(p.ReadText())); break; case 3: //boolean v = Value((bool)atoi(p.ReadText())); break; case 4: //double v = Value(atof(p.ReadText())); break; case 5: //dateTime.iso8601 p.ReadTextE(); v=Value(Date(1970,1,1)); break; case 6: //base64 LoadFromString(vv, p.ReadText()); v = Value(vv); break; default: throw Exc("unexpected Error"); break; } p.PassEnd(); return Value(v); } } throw Exc("unknown primitive"); }