//--------------------------------------------------------- void CSG_MetaData::_Save(wxXmlNode *pNode) const { int i; //----------------------------------------------------- pNode->SetName (CSG_String(Get_Name().Length() ? Get_Name() : CSG_String("NODE")).c_str()); pNode->SetContent(Get_Content().c_str()); if( Get_Content().Length() > 0 || (Get_Property_Count() == 0 && Get_Children_Count() == 0) ) { wxXmlNode *pChild = new wxXmlNode(pNode, wxXML_TEXT_NODE, SG_T("TEXT")); pChild->SetContent(Get_Content().c_str()); } //----------------------------------------------------- for(i=0; i<Get_Property_Count(); i++) { pNode->AddAttribute(Get_Property_Name(i).c_str(), Get_Property(i)); } //----------------------------------------------------- for(i=Get_Children_Count()-1; i>=0; i--) { Get_Child(i)->_Save(new wxXmlNode(pNode, wxXML_ELEMENT_NODE, Get_Child(i)->Get_Name().c_str())); } }
//--------------------------------------------------------- CSG_String CSG_MetaData::asText(int Flags) const { CSG_String s; if( Flags == 0 ) { for(int i=0; i<Get_Children_Count(); i++) { s += Get_Child(i)->Get_Name() + ":\t" + Get_Child(i)->Get_Content() + "\n"; } } else { wxXmlDocument XML; wxXmlNode *pRoot = new wxXmlNode(NULL, wxXML_ELEMENT_NODE, Get_Name().c_str()); XML.SetRoot(pRoot); _Save(pRoot); wxStringOutputStream Stream; XML.Save(Stream); s = &Stream.GetString(); if( Flags == 2 ) // remove <xml> { s = s.AfterFirst('\n'); } } return( s ); }
//--------------------------------------------------------- void CSG_MetaData::_Save(wxXmlNode *pNode) const { int i; pNode->SetName (Get_Name().Length() ? SG_String_To_UTF8(Get_Name()).c_str() : SG_T("NODE")); pNode->SetContent(SG_String_To_UTF8(Get_Content()).c_str()); if( Get_Content().Length() > 0 ) { wxXmlNode *pChild = new wxXmlNode(pNode, wxXML_TEXT_NODE, SG_T("TEXT"));// SG_String_To_UTF8(Get_Name()).c_str()); pChild->SetContent(SG_String_To_UTF8(Get_Content()).c_str()); } //----------------------------------------------------- for(i=0; i<Get_Property_Count(); i++) { pNode->AddProperty(SG_String_To_UTF8(Get_Property_Name(i)).c_str(), SG_String_To_UTF8(Get_Property(i)).c_str()); } //----------------------------------------------------- for(i=Get_Children_Count()-1; i>=0; i--) { if( Get_Child(i)->Get_Content().Length() > 0 || Get_Child(i)->Get_Children_Count() > 0 ) { wxXmlNode *pChild = new wxXmlNode(pNode, wxXML_ELEMENT_NODE, SG_String_To_UTF8(Get_Child(i)->Get_Name()).c_str()); Get_Child(i)->_Save(pChild); } } }
//--------------------------------------------------------- CSG_Table CSG_MetaData::asTable(int Flags) const { CSG_Table t; t.Add_Field("NAME" , SG_DATATYPE_String); t.Add_Field("VALUE", SG_DATATYPE_String); for(int i=0; i<Get_Children_Count(); i++) { CSG_Table_Record *r = t.Add_Record(); r->Set_Value(0, Get_Child(i)->Get_Name()); r->Set_Value(1, Get_Child(i)->Get_Content()); } return( t ); }
//--------------------------------------------------------- bool CSG_MetaData::Del_Children(int Depth, const SG_Char *Name) { if( Depth < 0 ) { // nop } else if( Name && *Name ) { for(int i=Get_Children_Count()-1; i>=0; i--) { if( Get_Child(i)->Get_Name().CmpNoCase(Name) ) { Get_Child(i)->Del_Children(Depth, Name); } else if( Depth > 0 ) { Get_Child(i)->Del_Children(Depth - 1, Name); } else { Del_Child(i); } } } else if( Depth > 0 ) { for(int i=0; i<Get_Children_Count(); i++) { Get_Child(i)->Del_Children(Depth - 1, Name); } } else { for(int i=0; i<Get_Children_Count(); i++) { delete(Get_Child(i)); } m_Children.Destroy(); } return( true ); }
//--------------------------------------------------------- int CSG_MetaData::_Get_Child(const CSG_String &Name) const { for(int i=0; i<Get_Children_Count(); i++) { if( Name.CmpNoCase(Get_Child(i)->Get_Name()) == 0 ) { return( i ); } } return( -1 ); }