我是delphi语言的新手,在这里我有一个疑问,我有一个名为vehicle.xml的xml文件.
看起来像这样
<data> <vehicle> <type>Car</type> <model>2005</model> <number>1568</number> </vehicle> <vehicle> <type>Car</type> <model>2009</model> <number>1598</number> </vehicle> </data>
我的Delphi窗体包含三个文本框:
> txtType
> txtModel
> txtnumber
在加载页面时,我想在文本框中显示vehicle.xml的内容,如:
> txtType = Car
> txtModel = 2005
> txtNumber =“1568”
解决方法
看看Delphi自己的TXMLDocument组件,例如:
procedure TForm1.FormCreate(Sender: TObject); var Vehicle: IXMLNode; begin XMLDocument1.FileName :='vehicle.xml'; XMLDocument1.Active := True; try Vehicle := XMLDocument.DocumentElement; txtType.Text := Vehicle.ChildNodes['type'].Text; txtModel.Text := Vehicle.ChildNodes['model'].Text; txtnumber.Text := Vehicle.ChildNodes['number'].Text; finally XMLDocument1.Active := False; end; end;
或者,直接使用IXMLDocument接口(TXMLDocument包装):
procedure TForm1.FormCreate(Sender: TObject); var Doc: IXMLDocument; Vehicle: IXMLNode; begin Doc := LoadXMLDocument('vehicle.xml'); Vehicle := Doc.DocumentElement; txtType.Text := Vehicle.ChildNodes['type'].Text; txtModel.Text := Vehicle.ChildNodes['model'].Text; txtnumber.Text := Vehicle.ChildNodes['number'].Text; end;
更新:问题中的XML已被更改,现在将车辆元素包裹在数据元素内,并具有多个车辆元素.所以上面的代码必须相应调整,例如:
procedure TForm1.FormCreate(Sender: TObject); var Doc: IXMLDocument; Data: IXMLNode; Node: IXMLNode; I: Integer; begin Doc := LoadXMLDocument('vehicle.xml'); Data := Doc.DocumentElement; for I := 0 to Data.ChildNodes.Count-1 do begin Node := Data.ChildNodes[I]; // if all of the child nodes will always be 'vehicle' only // then this check can be removed... if Node.LocalName = 'vehicle' then begin // use Node.ChildNodes['type'],Node.ChildNodes['model'],// and Node.ChildNodes['number'] as needed... end; end; end;