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" ?>