首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

求教,怎么用delphi读取xml

2012-03-08 
求教,如何用delphi读取xml求教,如何用delphi读取xml[解决办法]unit MaininterfaceusesWindows, Messages,

求教,如何用delphi读取xml
求教,如何用delphi读取xml

[解决办法]
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, StdCtrls, msxmldom, XMLDoc, ExtCtrls, ComCtrls;

type
Tfrm_Main = class(TForm)
XMLDocument1: TXMLDocument;
Panel1: TPanel;
Splitter1: TSplitter;
Panel2: TPanel;
Memo1: TMemo;
Panel3: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Memo2: TMemo;
StatusBar1: TStatusBar;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function GetAppPath : string;

var
frm_Main: Tfrm_Main;
xmlClient :TXMLDocument;

implementation

{$R *.dfm}

function GetAppPath: string;
begin
Result := ExtractFilePath(ParamStr(0));
end;

procedure Tfrm_Main.Button1Click(Sender: TObject);
var
node :IXMLNode;
begin
if XMLDocument1.Active then
begin
{Read XML Node}
ShowMessage(XMLDocument1.ChildNodes[ 'gs '].ChildNodes[ 'art '].ChildNodes[ 'artNo '].Text);
node := XMLDocument1.ChildNodes[ 'gs '].ChildNodes[ 'art '].NextSibling;
ShowMessage(node.ChildNodes[ 'artNo '].Text);

{Write XML node}
{ShowMessage(XMLDocument1.ChildNodes[ 'art '].NextSibling.NodeName);
ShowMessage(XMLDocument1.ChildNodes[ 'gs '].ChildNodes[ 'art '].ChildNodes[ 'artNo '].Text);
XMLDocument1.ChildNodes[ 'note '].ChildNodes[ 'to '].Text := 'lxj ';
XMLDocument1.SaveToFile(XMLDocument1.FileName);
}
end else
begin
MessageBox(0, 'XML Document not Active ! ', 'Error ',MB_OK + MB_ICONERROR);
end;
end;

procedure Tfrm_Main.Button2Click(Sender: TObject);
var
filename : string;
code : string;
begin
if XMLDocument1.Active then
begin
code := DatetimeToStr(now());
code := StringReplace(code, ': ', ' ',[rfReplaceAll]);
code := StringReplace(code, '/ ', ' ',[rfReplaceAll]);
code := StringReplace(code, '\ ', ' ',[rfReplaceAll]);

{Save XML file}
filename := GetAppPath + 'Save ' + code + '.XML ';
XMLDocument1.SaveToFile(filename);
end else
begin
MessageBox(0, 'XML Document not Active ! ', 'Error ',MB_OK + MB_ICONERROR);
end;
end;

procedure Tfrm_Main.Button3Click(Sender: TObject);
begin
if RadioButton1.Checked then
XMLDocument1.XML := Memo1.Lines
else
XMLDocument1.XML := Memo2.Lines;
XMLDocument1.Active := True;
end;

//Create
procedure Tfrm_Main.Button4Click(Sender: TObject);
var
xmlDoc :TXMLDocument;
begin
//xmlClient := TXMLDocument.Create(nil);
//xmlClient.XML.Add( ' <gs> </gs> ');
//xmlCLient.Active := True;
XMLDoc := nil;
XMLDoc := TXMLDocument.Create(nil) ;
XMLDoc.FileName := 'interface.xml ';//WideString(edtExchgFile);
try


XMLDoc.Active := True;
//&Ocirc;&Uacute;&Otilde;&acirc;&Agrave;&iuml;&Ecirc;&sup1;&Oacute;&Atilde; XMLDoc
Memo1.Lines.Add( '&cedil;ù&frac12;&Uacute;&micro;&atilde;&micro;&Auml;&Atilde;&ucirc;×&Ouml;&Icirc;&ordf;: ' + XMLDoc.Node.NodeName );
Memo1.Lines.Add( '&cedil;ù&frac12;&Uacute;&micro;&atilde;&Iuml;&Acirc;&micro;&Auml;×&Oacute;&frac12;&Uacute;&micro;&atilde;&Ecirc;&yacute;&Auml;&iquest;&Icirc;&ordf;: ' + IntToStr(XMLDoc.ChildNodes.Count ));
XMLDoc.Active := False;
except
on E:Exception do
begin
memo1.Lines.Add(E.message);
end;
end;
XMLDoc := nil;
end;

end.
[解决办法]

Delphi(Pascal) code
unit Unit1;     interface    uses    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,     Dialogs, XMLIntf, XMLDoc, StdCtrls;     type    TStudent = Class(TObject)     public      Name: string;       Sex: string;       Age: Integer;       Phone: string;     end;     TForm1 = class(TForm)       Button1: TButton;       procedure FormCreate(Sender: TObject);       procedure FormDestroy(Sender: TObject);       procedure Button1Click(Sender: TObject);     private      { Private declarations }      FXMLDoc: IXMLDocument;  // XML文档       FDocElement: IXMLNode;  // 根节点       FList: TList;     public      { Public declarations }    end;     var    Form1: TForm1;     implementation    uses Student;     {$R *.dfm}    const    XMLString =   '<?xml version="1.0" encoding="GB2312"?>' +   '<Students>' +   '    <Student Sex = "男">' +   '        <Name>文文</Name>' +   '        <Age>18</Age>' +   '        <Phone>4745723</Phone>' +   '    </Student>' +   '    <Student Sex = "女">' +   '        <Name>喃喃</Name>' +   '        <Age>17</Age>' +   '        <Phone>4644563</Phone>' +   '    </Student>' +   '</Students>';     procedure TForm1.FormCreate(Sender: TObject);   begin    FXMLDoc := TXMLDocument.Create(nil);     FXMLDoc.XML.Text := XMLString;     FXMLDoc.Active := True;     FList := TList.Create;     FDocElement := FXMLDoc.DocumentElement;   end;     procedure TForm1.FormDestroy(Sender: TObject);   var    i: Integer;   begin    FXMLDoc.Active := False;     for i := 0 to Flist.Count - 1 do      TStudent(FList.Items[i]).Free;     FList.Free;   end;     procedure TForm1.Button1Click(Sender: TObject);   var    i: Integer;     Stu: TStudent;     StuNode: IXMLNode;   begin    for i := 0 to FDocElement.ChildNodes.Count - 1 do    begin      StuNode := FDocElement.ChildNodes[i];       Stu := TStudent.Create;       Stu.Name := StuNode.ChildValues['Name'];       Stu.Sex := StuNode.Attributes['Sex'];       Stu.Age := StuNode.ChildValues['Age'];       Stu.Phone := StuNode.ChildValues['Phone'];       FList.Add(Stu);     end;   end;     end. 

热点排行