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);
}
|
|
|