主题:delphi的RecordNodeList读取XML出错
问题:delphi的RecordNodeList读取XML出错(读取XML子节点时,把多个子节点赋值给RecordNodeList出错),
RecordNodeList有大小限制吗?XML文件的其中子节点少就可以读取,多了读取就报错,是别的原因吗?
代码:
function TTables.getTableFields(TableName:string):TVirtualTable;
var
RootNodeList,RecordNodeList:IXMLNodeList;
TableNode:IXMLNode;
MyTf:TFields;
i,m:Integer;
SrcTN,DestTN,WellFN:string;
begin
Result:=nil;
RootNodeList:=MyXmlDoc.DocumentElement.ChildNodes;
if RootNodeList.Count>0 then
begin
TableNode:=RootNodeList.FindNode(TableName);
if TableNode.HasChildNodes then
begin
try
Result:=TVirtualTable.Create(nil);
Result.Active:=True;
except
FreeAndNil(result);
raise TmyException.Create('虚拟表建立错误',self);
exit;
end;
BuildFields(Result);
DestTN:=TableNode.Attributes['DEST'];
SrcTN:=TableName;
WellFN:=TableNode.Attributes['WELLFIELD'];
if TableNode.HasChildNodes then
begin
RecordNodeList:=TableNode.ChildNodes; //在这个地方报错了(判断JJBSJ下面有字节点后,把子节点赋值给RecordNodeList时报错)
m:=RecordNodeList.Count;
for i:=0 to m-1 do
begin
TableNode:=RecordNodeList[i];
Result.Append;
Result.FieldByName('SrcTableName').AsString:=SrcTN;
Result.FieldByName('DestTableName').AsString:=DestTN;
Result.FieldByName('WellNameFieldName').AsString:=WellFN;
Result.FieldByName('SrcFieldName').AsString:=TableNode.Attributes['SRC'];
Result.FieldByName('DestFieldName').AsString:=TableNode.Attributes['DEST'];
Result.FieldByName('FiledType').AsString:=TableNode.Attributes['TYPE'];
Result.FieldByName('FieldLen').AsInteger:=strtoint(TableNode.Attributes['LEN']);
Result.FieldByName('IsKey').AsBoolean:=strtobool(TableNode.Attributes['ISKEY']);
end;
end;
end;
end ;
end;
RecordNodeList有大小限制吗?XML文件的其中子节点少就可以读取,多了读取就报错,是别的原因吗?
代码:
function TTables.getTableFields(TableName:string):TVirtualTable;
var
RootNodeList,RecordNodeList:IXMLNodeList;
TableNode:IXMLNode;
MyTf:TFields;
i,m:Integer;
SrcTN,DestTN,WellFN:string;
begin
Result:=nil;
RootNodeList:=MyXmlDoc.DocumentElement.ChildNodes;
if RootNodeList.Count>0 then
begin
TableNode:=RootNodeList.FindNode(TableName);
if TableNode.HasChildNodes then
begin
try
Result:=TVirtualTable.Create(nil);
Result.Active:=True;
except
FreeAndNil(result);
raise TmyException.Create('虚拟表建立错误',self);
exit;
end;
BuildFields(Result);
DestTN:=TableNode.Attributes['DEST'];
SrcTN:=TableName;
WellFN:=TableNode.Attributes['WELLFIELD'];
if TableNode.HasChildNodes then
begin
RecordNodeList:=TableNode.ChildNodes; //在这个地方报错了(判断JJBSJ下面有字节点后,把子节点赋值给RecordNodeList时报错)
m:=RecordNodeList.Count;
for i:=0 to m-1 do
begin
TableNode:=RecordNodeList[i];
Result.Append;
Result.FieldByName('SrcTableName').AsString:=SrcTN;
Result.FieldByName('DestTableName').AsString:=DestTN;
Result.FieldByName('WellNameFieldName').AsString:=WellFN;
Result.FieldByName('SrcFieldName').AsString:=TableNode.Attributes['SRC'];
Result.FieldByName('DestFieldName').AsString:=TableNode.Attributes['DEST'];
Result.FieldByName('FiledType').AsString:=TableNode.Attributes['TYPE'];
Result.FieldByName('FieldLen').AsInteger:=strtoint(TableNode.Attributes['LEN']);
Result.FieldByName('IsKey').AsBoolean:=strtobool(TableNode.Attributes['ISKEY']);
end;
end;
end;
end ;
end;