请教如何读:XML文件;(200分)

  • 主题发起人 主题发起人 jlcsx
  • 开始时间 开始时间
J

jlcsx

Unregistered / Unconfirmed
GUEST, unregistred user!
由于本人没有涉及过XML,现需要从XML文件中读取数据写如到数据库中,
请各位高手指点:

XML文件格式:

======================
<?xml version="1.0" encoding="gb2312" ?>
- <orderlist>
- <order>
<orderid>GS080402-000051</orderid>
<userinfo />
<address />
<phone>13758722177</phone>
- <detail>
<item price="15.00">瑶柱水蒸蛋</item>
<item price="16.00">川烧茄子</item>
<item price="18.00">葱爆二样</item>
</detail>
</order>
</orderlist>

================================

我采用: XMLDocument的控件,读取,

procedure TForm1.Button1Click(Sender: TObject);
var
Clinic: IXMLNode;
begin
XMLDocument1.Active := true;
Clinic := XMLDocument1.DocumentElement.ChildNodes[0];
Memo1.Lines.Clear;
Memo1.Lines.Add(Clinic.ChildNodes['orderid'].Text);
Memo1.Lines.Add(Clinic.ChildNodes['userinfo'].Text);
Memo1.Lines.Add(Clinic.ChildNodes['address'].Text);
Memo1.Lines.Add(Clinic.ChildNodes['phone'].Text);
Memo1.Lines.Add(Clinic.ChildNodes['detail'].Text);
end;

但如何读取子字节点的数据:
子节点如下:[red][/red][black][/black]
- <detail>
<item price="15.00">瑶柱水蒸蛋</item>
<item price="16.00">川烧茄子</item>
<item price="18.00">葱爆二样</item>
</detail>
 
function getxml(xmlfilename:string;xml:Txmldocument;memo:Tmemo):string;
var
xmlnode,rootnode:Ixmlnode;
i,j,n,p:integer;
nodename:string;
begin
memo.Clear ;
xml.FileName:=xmlfilename;
xml.Active:=true;
rootnode := xml.DocumentElement;
xmlnode := xml.DocumentElement;
j := rootnode.ChildNodes.Count;//根下有多少个一级节点
for i := 0 to j - 1 do
begin
n := rootnode.ChildNodes.ChildNodes.Count;//每个节点下有多少属性项
for p := 0 to n- 1 do
begin
xmlnode := rootnode.ChildNodes.ChildNodes[p];
nodename := xmlnode.NodeName;//属性项的名称
memo.Lines.Add((nodename+': ' + xmlnode.Text));//属性值
end;
memo.Lines.Add('------------------------------------------------------------------');
end;
end;
 
致:caizhijia
谢谢你的指点

我文件的内容是:

<?xml version="1.0" encoding="gb2312" ?>
- <orderlist>
- <order>
<orderid>GS080402-000051</orderid>
<userinfo />
<address />
<phone>13758722177</phone>
- <detail>
<item price="15.00">瑶柱水蒸蛋</item>
<item price="16.00">川烧茄子</item>
<item price="18.00">葱爆二样</item>
</detail>
</order>
</orderlist>


读取到:detail就出错了

另外,
<item price="15.00">瑶柱水蒸蛋</item>
<item price="16.00">川烧茄子</item>
<item price="18.00">葱爆二样</item>
没有读到

请再指点
 
procedure TForm1.Button1Click(Sender: TObject);
var
rNode,cNode,sItem: IXMLNode;
i: Integer;
begin
with XMLDocument1 do begin
FileName := 'c:/1.xml';
Active := True;
Memo1.Lines.Add('Version=' + Version);
Memo1.Lines.Add('Encoding=' + Encoding);
rNode := Node;
rNode := rNode.ChildNodes.FindNode('orderlist');
rNode := rNode.ChildNodes.FindNode('order');
cNode := rNode.ChildNodes.FindNode('orderid');
Memo1.Lines.Add(cNode.NodeName + '=' + cNode.NodeValue);
cNode := rNode.ChildNodes.FindNode('phone');
Memo1.Lines.Add(cNode.NodeName + '=' + cNode.NodeValue);
cNode := rNode.ChildNodes.FindNode('detail');
for i := 0 to cNode.ChildNodes.Count - 1 do begin
sItem := cNode.ChildNodes;
Memo1.Lines.Add(sItem.NodeName + '=' + sItem.NodeValue);
Memo1.Lines.Add('price=' + sItem.Attributes['price']);
end;
end;
end;
 
接受答案了.
 
后退
顶部