uses
XMLDoc, XMLIntf;
function TAServerTbl.Init(szSerPath: string): Boolean;
var
pData: PServer;
XMLServer: TXMLDocument;
NodeList1, NodeList2: IXMLNodeList;
Node1, Node2: IXMLNode;
ServerUrl: TStringList;
i, j, nLen: Integer;
szTemp: AnsiString;
begin
Clear;
try
XMLServer := TXMLDocument.Create(Application);
if (not FileExists(szSerPath)) then begin
ServerUrl := TStringList.Create();
ServerUrl.LoadFromFile(szIniPath);
//从网上的地址载入,还可以从流中载入
XMLServer.LoadFromFile(ServerUrl.Values[\'ServerUrl\']);
//保存为文件
XMLServer.savetofile(szSerPath);
ServerUrl.Free();
end else begin
//直接从文件载入
XMLServer.LoadFromFile(szSerPath);
end;
//得到结列表
NodeList1 := XMLServer.DocumentElement.ChildNodes;
//循环读每个结列表
for i := 0 to NodeList1.Count - 1 do begin
NodeList2 := NodeList1[i].ChildNodes;
for j := 0 to NodeList2.Count - 1 do begin
New(pData);
//每个结列表中的结
Node2 := NodeList2[j];
//结列表的名字 比如 华东电信 里边还有10个结节,也就是10个服务器
pData^.m_szName := NodeList1[i].Attributes[\'name\'];
//去掉-[新] 结节的名字,也就是服务器名
szTemp := Node2.Attributes[\'name\'];
nLen := Pos(\'-\', szTemp);
if (nLen > 0) then begin
pData^.m_szSerName := Copy(szTemp, 1, (nLen - 1)*2);
end else begin
pData^.m_szSerName := szTemp;
end;
//读各个节
pData^.m_szIp := HostToIP(Node2.Attributes[\'ip\']);
pData^.m_nPort := StrToInt(Node2.Attributes[\'port\']);
pData^.m_szVer := ResolveVer(Node2.Attributes[\'version\']);
pData^.m_bState := StrToBool(Node2.Attributes[\'state\']);
FList.AddObject(pData^.m_szSerName, TObject(pData));
end;
end;
XMLServer.Free();
Result := True;
except
On e: Exception do
begin
Result := False;
end;
end;
end;
<?xml version=\"1.0\" encoding=\"gb2312\" ?>
<root> <group name=\"华南电信\" groupid=\"101\"> <server name=\"王者大陆-[新]\" ip=\"121.9.239.189\" port=\"9016\" version=\"3.00.105\" state=\"3\" pip=\"121.9.239.224\" pport=\"9394\" serverid=\"10109\" serverlevel=\"0\" tip=\"\" /> <server name=\"众神之域-[新]\" ip=\"121.9.239.225\" port=\"9016\" version=\"3.00.105\" state=\"1\" pip=\"121.9.239.224\" pport=\"9394\" serverid=\"10110\" serverlevel=\"0\" tip=\"\" /> <server name=\"天空之城-[新]\" ip=\"121.9.239.213\" port=\"9016\" version=\"3.00.105\" state=\"2\" pip=\"121.9.239.224\" pport=\"9394\" serverid=\"10108\"