/** * Reads a node from the document and parses into metadata. */ bool SessionTranslator::OnRead( Context & ctxt, const XMLElement & elem, AccessorAdaptorBase* pAdaptor ) { const XMLElement* pchild; const char* pszValue; if( pAdaptor == NULL) return false; Session session; bool retval = false; //Parse the AttributedObject Elements. if( !ReadAttributedObject( session, ctxt, elem)) return false; //Done processing element, if no children, meaning this is //an element referencing another element. if( elem.NoChildren()) session.IsReference(true); else { //Parse scenario pchild = elem.FirstChildElement("scenario"); pszValue = (pchild != NULL) ? pchild->GetText() : ""; session.Scenario(pszValue ); //Parse campaign pchild = elem.FirstChildElement("campaign"); pszValue = (pchild != NULL) ? pchild->GetText() : ""; session.Campaign(pszValue ); //Parse location pchild = elem.FirstChildElement("location"); try { double lat = atof( pchild->Attribute("lat")); double lon = atof( pchild->Attribute("lon")); double height= atof( pchild->Attribute("height")); Location loc(lat, lon, height); session.Location( loc); } catch(...) { throw TranslationException("Couldn't parse Location element"); } //Parse contact pchild = elem.FirstChildElement("contact"); pszValue = (pchild != NULL) ? pchild->GetText() : ""; session.Contact(pszValue ); //Parse poc pchild = elem.FirstChildElement("poc"); pszValue = (pchild != NULL) ? pchild->GetText() : ""; session.Poc(pszValue ); } //Lastly set the session on the specified object. pAdaptor->set( &session); return true; }