/** * Writes the attributed object id, comments, and artifacts. */ void Translator::WriteAttributedObject(const AttributedObject& aobj, Context& ctxt, tinyxml2::XMLElement & elem, bool bIdAttributeRequired) { //Write the ID. if( aobj.Id().length() > 0 ) elem.SetAttribute( "id", aobj.Id().c_str()); else if( bIdAttributeRequired ) throw GnssMetadata::TranslationException( "Required id attribute not defined."); //Write the comments. CommentList::const_iterator citer = aobj.Comments().begin(); for(; citer != aobj.Comments().end(); citer++) { XMLElement* pec = elem.GetDocument()->NewElement( "comment"); const Comment& cmt = *citer; const char* szFormat = (cmt.Format() == Comment::text) ? "text":"html"; pec->SetAttribute("format",szFormat); pec->SetText( cmt.Value().c_str()); elem.InsertEndChild(pec); } //Write the Artifacts. AnyUriList::const_iterator aiter = aobj.Artifacts().begin(); for(; aiter != aobj.Artifacts().end(); aiter++) { XMLElement* pec = elem.GetDocument()->NewElement( "artifact"); pec->SetText( aiter->Value().c_str()); elem.InsertEndChild(pec); } }
/** * Reads the attributed object id, comments, and artifacts. */ bool Translator::ReadAttributedObject( AttributedObject& aobj, Context& ctxt, const tinyxml2::XMLElement & elem, bool bIdAttributeRequired ) { //Grab the ID. pcstr szid = elem.Attribute("id"); if( szid == NULL) { if( bIdAttributeRequired ) throw GnssMetadata::TranslationException( "Required id attribute not defined."); } else aobj.Id(szid); //Parse the comments. const XMLElement* pelem = elem.FirstChildElement("comment"); for( ;pelem != NULL; pelem = pelem->NextSiblingElement("comment")) { const char* szFmt = pelem->Attribute("format"); Comment::CommentFormat fmt = (strcmp(szFmt, "text") == 0) ? Comment::text : Comment::html; Comment comment( pelem->GetText(), fmt); aobj.Comments().push_back( comment); } //Parse the Artifacts. pelem = elem.FirstChildElement("artifact"); for( ;pelem != NULL; pelem = pelem->NextSiblingElement("artifact")) { AnyUri auri( pelem->GetText()); aobj.Artifacts().push_back( auri); } return true; }