| Make | 
| Отправлено: 20.12.2006, 09:39 | 
 
 
 | 
  
Ученик-кочегар 
 
Группа: Участник 
Сообщений: 13 
  
  
 | 
 К примеру имется форма на которой расположены компонеты Edit и ListBox, а также несколько кнопок на открытие дочерних форм (пусть на 2 формы) с темеже или другими компонетами как мне записать данные из всех компонет всех форм в XML фаил а потом при создании форм загружать все ето обрадно
  
Отредактировано Make — 20.12.2006, 09:40  | 
  | 
| olegenty | 
| Отправлено: 20.12.2006, 10:00 | 
 
 
 | 
  
Ветеран 
 
Группа: Модератор 
Сообщений: 2412 
  
  
 | 
 вопрос риторический (содержит в себе ответ).
  
сформировать XML — вообще ничего не нужно. прикидываешь устраивающий тебя состав узлов (Nodes) и формируешь его (хотя парсером всё же удобнее на порядок).
  
прочитать — тоже не сложно. есть варианты. например, воспользоваться TXMLDocument. но это достаточно тормозной и неудобный парсер. где-то встречал статейку с тестом различных (5 штук) XML парсеров — там выйграл TjanXMLParser2. он бесплатен, качнуть можно на torry.net. сам пользуюсь именно им.
 | 
  | 
| Make | 
| Отправлено: 21.12.2006, 09:14 | 
 
 
 | 
  
Ученик-кочегар 
 
Группа: Участник 
Сообщений: 13 
  
  
 | 
 если чесно ничего не понял, можно пожалуйст попроще тоже самое описать, я ведь еще мал и глуп сленгом не владею, ума тоже не нажил..    | 
  | 
| olegenty | 
| Отправлено: 21.12.2006, 10:29 | 
 
 
 | 
  
Ветеран 
 
Группа: Модератор 
Сообщений: 2412 
  
  
 | 
 Ну, вот вырезка на чтение (использую TjanXMLParser2): 
| CODE  |   
/////////////////////////////////////////////////////////////////////////////////////////////////// 
PResTable __fastcall CServerOperator::SelectServersFromXml(const AnsiString FileName) 
{ 
   PResTable Result(new CResTable(false));
  
   SmartIniType Xml(new IniType()); // SmartIniType — это auto_ptr<TjanXMLParser2>, IniType — это TjanXMLParser2 
   Xml->LoadXML(FileName); 
   TjanXMLNode2 *Servers = Xml->getChildByName("ServerList"); 
   if (Servers) 
   { 
       TjanXMLNodeList2 *ServerList = Servers->nodes; 
       if (ServerList) 
       { 
           try 
           { 
               for (int ServerIndex = 0; ServerIndex < ServerList->Count; ServerIndex++) 
               { 
                   TjanXMLNode2 *Item = (TjanXMLNode2*)(ServerList->Items[ServerIndex]); 
                   if (Item) 
                   { 
                       CFields Server; 
                       Server.Add("Name"            , Item->name); 
                       Server.Add("Address"         , Item->attribute["Address"]); 
                       Server.Add("User"            , Item->attribute["User"   ]); 
                       Server.Add("Password"        , Item->attribute["Password"]); 
                       Server.Add("HostDirName"     , Item->attribute["HostDirName"]); 
                       Server.Add("HostVerFileName" , Item->attribute["HostVerFileName"]); 
                       Server.Add("HostListFileName", Item->attribute["HostListFileName"]); 
                       Server.Add("UpdateInfoDir"   , Item->attribute["UpdateInfoDir"]); 
                       Result->Append(Server); 
                   } 
               } 
               Result->Executed() = true; 
           } catch(...) 
           { 
           } 
       } 
   } 
   return Result; 
} 
 |  
  
а вот на запись: 
| CODE  |   
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void __fastcall CServerOperator::SaveServers2Xml(const AnsiString FileName) 
{ 
   PVirtualNode  Node  ; 
   RecordType   *Record = NULL; 
   AnsiString BackupFileName = ChangeFileExt(FileName, ".bak"); 
   CopyFile(FileName.c_str(), BackupFileName.c_str(), false); 
   SmartIniType Xml = SmartIniType(new IniType()); 
   Xml->LoadXML(FileName); 
   TjanXMLNode2 *Servers = Xml->getChildByName("ServerList"); 
   if (Servers) Servers->parentNode->deleteNode(Servers); 
   Servers = Xml->addChildByName("ServerList"); 
   if (!Servers) return;
  
   for (unsigned int i = 0; i < Tree_->RootNodeCount; i++) 
   { 
       if (!i) 
       { 
           Node = Tree_->RootNode->FirstChild; 
       } else 
       { 
           Node = Node->NextSibling; 
       } 
       Record = (RecordType*)Tree_->GetNodeData(Node); 
       if (Record) 
       { 
           TjanXMLNode2 *Server = Servers->addChildByName(Record->ServerName); 
           if (Server) 
           { 
               CFields Attributes = Servers_[Record->ServerName];
  
               Server->attribute["Address"]          = Attributes["Address"]; 
               Server->attribute["User"]             = Attributes["User"]; 
               Server->attribute["Password"]         = Attributes["Password"]; 
               Server->attribute["HostDirName"]      = Attributes["HostDirName"]; 
               Server->attribute["HostVerFileName"]  = Attributes["HostVerFileName"]; 
               Server->attribute["HostListFileName"] = Attributes["HostListFileName"]; 
               Server->attribute["UpdateInfoDir"]    = Attributes["UpdateInfoDir"]; 
           } 
       } 
   } 
   Xml->SaveXML(FileName); 
} 
 |   
 | 
  |