2,495
社区成员
发帖
与我相关
我的任务
分享
procedure TForm1.Button31Click(Sender: TObject);
var A : array of array[0..8] of String;
i,j,k,Top:integer;
nodeList,nodeList1,nodeList2:IXMLNodeList;
XMLRootNode,XMLnode1,XMLnode2,XMLnode3:IXMLNode;
SQL:string;
begin
XMLRootNode := XMLDocument1.DocumentElement; // 根节点
NodeList:=XMLRootNode.ChildNodes; // 第1级
fOR I:=0 TO NodeList.Count-1 DO
BEGIN
XMLNode1:=NodeList.Get(i);
if XMLNode1.NodeName='JST_TCPARKIN' then
begin
nodeList1:=XMLNode1.ChildNodes; // 第2级
For j:=0 TO NodeList1.Count-1 DO
begin
XMLNode2:=NodeList1.Get(j);
if XMLNode2.NodeName='DATA' then
begin
Top:=NodeList1.Count;
SetLength(A, Top);
nodeList2:=XMLNode2.ChildNodes; // 第3级
For k:=0 TO NodeList2.Count-1 DO
begin
XMLNode3:=NodeList2.Get(k);
A[j,k]:=XMLNode3.NodeValue;
end;
end;
end;
end;
end;
For i:=0 TO Top-1 DO
begin
DBGrid1.DataSource.DataSet.Append;
For j:=0 TO 8 DO
begin
DBGrid1.DataSource.DataSet.FieldByName('MARKETID').AsString:=(A[i,0]);
DBGrid1.DataSource.DataSet.FieldByName('SERIALNO').AsString:=(A[i,1]);
DBGrid1.DataSource.DataSet.FieldByName('INDATE').AsString:=(A[i,2]);
DBGrid1.DataSource.DataSet.FieldByName('OUTDATE').AsString:=(A[i,3]);
DBGrid1.DataSource.DataSet.FieldByName('VEHICLETYPENAME').AsString:=(A[i,4]);
DBGrid1.DataSource.DataSet.FieldByName('PAYTYPENAME').AsString:=(A[i,5]);
DBGrid1.DataSource.DataSet.FieldByName('INAMOUNT').AsString:=(A[i,6]);
DBGrid1.DataSource.DataSet.FieldByName('OUTAMOUNT').AsString:=(A[i,7]);
DBGrid1.DataSource.DataSet.FieldByName('ICCARDTYPENAME').AsString:=(A[i,8]);
end;
DBGrid1.DataSource.DataSet.FieldByName('ID').AsString:=inttostr(1000+i);
DBGrid1.DataSource.DataSet.Post;
end;
DBGrid_AutoSize(DBGrid1,aDataSource1); // 不显示 ID
end;
完整代码,测试效果见上图。
注意你的XML文本中,有错误字符,需要修改。。
uses
XMLDoc,XMLIntf;
procedure TForm1.btn1Click(Sender: TObject);
var
i,j,i_ParentNodeCount,i_DataNodeCount:Integer;
Str_DataXML:string;
XML_Doc:TXMLDocument;
XML_RootNode,XML_ParentNode,XML_DataNode,XML_ItemNode:IXMLNode;
begin
XML_Doc:=TXMLDocument.Create(Application);
try
XML_Doc.LoadFromXML(Str_DataXML);
XML_Doc.Active:=True;
XML_RootNode:=XML_Doc.DocumentElement;
XML_ParentNode:=XML_RootNode.ChildNodes.FindNode('JST_TCPARKIN'); //这里也可以变成下面那样子的FOR
if XML_ParentNode=nil then
begin
//Add your exception message code
Exit;
end;
i_ParentNodeCount:=XML_ParentNode.ChildNodes.Count;
if i_ParentNodeCount>0 then
begin
for i:=0 to i_ParentNodeCount-1 do
begin
XML_DataNode:=XML_ParentNode.ChildNodes[i];
i_DataNodeCount:=XML_DataNode.ChildNodes.Count;
if i_DataNodeCount>0 then
begin
for j:=0 to i_DataNodeCount-1 do
begin
XML_ItemNode:=XML_DataNode.ChildNodes[j];
ShowMessage(XML_ItemNode.NodeName);
ShowMessage(XML_ItemNode.Text);
end;
end;
end;
end;
finally
XML_Doc.Free;
end;
end;