六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

簡析Delphi中的XML編程

[摘要]寧波吉聯計算機技術有限公司研發部 徐榮勝 XML(eXtensible Markup Language可擴展標志語言)在近幾年的信息類雜志、網站上可謂是最搶眼的一詞。大大小小的信息產品都爭相和它搭上...
寧波吉聯計算機技術有限公司研發部 徐榮勝

XML(eXtensible Markup Language可擴展標志語言)在近幾年的信息類雜志、網站上可謂是最搶眼的一詞。大大小小的信息產品都爭相和它搭上關系,唯恐趕不及這輛快車。有著良好口碑的寶藍
(Borland)系列開發平臺也不例外,從6.0版開始就集成了XML組件包,因其使用MSXMLDom解析器,相比于此前廣泛應用的XMLParser解析器,MSXMLDom更顯規范、中文兼容性更好(元素名、屬性名均支持中文),很受開發者青睞。為幫助初學者快速掌握Delphi中的XML編程,筆者特寫此文,以供交流。

筆者通過一個讀寫XML文件的實例來說明XML編程的各個步驟,只需讀者有結點、元素、屬性的基本概念就能容易的理解本文。筆者所要讀入的XML文件結構如下所示,命名為Input.xml。



<學生花名冊>

<學生 性別 = "男">

<姓名>李華

<年齡>14

<電話>6287555



<學生 性別 = "男">

<姓名>張三

<年齡>16

<電話>8273425





Input.xml文件的第一行是XML的版本說明,屬性encoding宣告使用何種字符集建立,默認以Unicode 編碼(UTF-8 或UTF-16),這里用中文GB2312碼。第二行“<學生花名冊>“是根元素。下面定義了兩個學生元素,學生下面嵌套了三個子元素,是對學生的進一步說明。與之相對應的,我們在Delphi中定義如下的學生數據結構,"//"后面的文字是對變量或語句的說明,下同。

TStudent = class {學生}

sex : string; //學生性別

name : string; //學生姓名

age : integer; //學生年齡

phone: string; //電話號碼

end;

為了讀寫,我們需要放置兩個TXMLDocument控件,在Delphi VCL面板的Internet標簽頁里那個標有XML字樣的控件就是,當然此控件也可以動態創建,但需要包含必要的文件,這里為簡單起見,我們直接放置在窗體上,分別命名為InXMLDoc和OutXMLDoc,InXMLDoc用于調入Input.xml文件,OutXMLDoc用于暫存輸出到Output.xml的文檔。

在窗體上放個按鈕,我們把測試代碼直接放置在按鈕的單擊事件里。先定義幾個變量,用來保存臨時信息,如下所示:

Root : IXMLNode; //指向XML根結點

Parent_Node: IXMLNode; //指向學生結點

Child_node : IXMLNode; //指向學生的子結點

Student : TStudent; //存單個學生信息

List : TList; //存學生列表

i : integer; //循環變量


我們先來讀入XML文件,代碼如下:

List := TList.Create; //初始化列表

InXMLDoc.LoadFromFile('Input.xml'); //調入Input.xml文件

Root := InXMLDoc.DocumentElement; //取XML文件的根結點,即“<學生花名冊>”

Parent_Node := Root.ChildNodes.First; //使Parent_Node指向學生結點

while (Parent_Node <> nil) do //循環取多個學生,可再多加幾個學生信息測試

begin

if (Parent_Node.NodeName = '學生') then //判斷是否為學生結點

begin

Student := TStudent.Create; //新建一個學生的結構信息

Student.sex := Parent_Node.Attributes['性別']; //取學生的性別屬性

Child_Node := Parent_Node.ChildNodes.First;

//使Child_Node指向該學生的第一個子結點信息

while (Child_Node <> nil) do //循環取學生的各個子各點

begin

if (Child_Node.NodeName = '姓名') then //判斷是否為姓名結點

Student.name := Child_Node.Text //取姓名結點的值,取于name字段中

else if (Child_Node.NodeName = '年齡') then //此行起后四行與前兩行類似

Student.age := StrToInt(Child_Node.Text)

else if (Child_Node.NodeName = '電話') then

Student.phone := Child_Node.Text;

Child_Node := Child_Node.NextSibling; //順序取下一個學生的子結點信息

end;

List.Add(Student); //把一個學生信息加入列表

end;

Parent_Node := Parent_Node.NextSibling; //順序取下一個學生信息

end;

到這兒,所有的學生信息都已存到List列表里面了,讀者可以跟蹤代碼測試。


下面我們把List里的臨時學生信息存到Output.xml文件里,代碼如下:

OutXMLDoc.Active := true; //激活OutXMLDoc,自動初始化空的XML文檔

OutXMLDoc.Encoding := 'GB2312'; //設置字符集

Root := OutXMLDoc.AddChild('學生花名冊'); //建根結點

for i := 0 to List.Count - 1 do //循環取各個學生信息

begin

Student := List.Items[i]; //順序取一個學生信息

if (Student <> nil) then

begin

Parent_Node := Root.AddChild('學生'); //根結點后添加一個學生結點

Parent_Node.Attributes['性別'] := Student.sex; //給學生結點設置性別屬性

Child_Node := Parent_Node.AddChild('姓名'); //學生結點后添加一個姓名結點

Child_Node.Text := Student.name; //設置姓名的文本值

Child_Node := Parent_Node.AddChild('年齡'); //此行起后四行與前兩行類似

Child_Node.Text := IntToStr(Student.age);

Child_Node := Parent_Node.AddChild('電話');

Child_Node.Text := Student.phone;

end;

end;

OutXMLDoc.SaveToFile('Output.xml'); //把組織好的XML文檔存于Output.xml文件中

OutXMLDoc.Active := false; //鈍化(關閉)OutXMLDoc

List.Free; //最后釋放保存臨時學生信息的列表


好了,看看Input.xml和Output.xml內容是不是一樣。是不是很簡單呢?其實在C++ Builder也有相同的組件,只需將Pascal語法轉換成C++語法,上面的代碼就完全可以用了。有興趣的朋友可與筆者進一步交流其它XML應用以及程序設計模式、J2EE開發、Rose UML建模等知識,記住我的E-Mail:nbDeveloper@hotmail.com。


主站蜘蛛池模板: 三级久久 | 日日碰日日摸日日澡视频播放 | 天天碰夜夜 | 日本一区二区视频在线 | 色综合久久中文字幕网 | 四虎在线影视在线影库 | 午夜影院在线免费观看 | 日本欧美视频在线 | 性视频亚洲| 婷婷综合激六月情网 | 欧美无人区码卡二卡3卡4免费 | 四虎影视国产精品亚洲精品hd | 一道本不卡视频 | 涩涩涩涩涩涩涩 | 亚洲精品中文字幕乱码影院 | 亚洲成在人线中文字幕 | 日本国产中文字幕 | 日本中文字幕不卡 | 又爽又黄又无遮挡的视频在线观看 | 色噜噜亚洲男人的天堂 | 色视频一区 | 日韩精品欧美一区二区三区 | 日韩在线观看精品 | 四虎精品福利视频精品 | 五月开心综合 | 亚洲va中文va欧美va爽爽 | 泄欲网站免费观看 | 亚洲 欧美 字幕 一区 在线 | 日日影视| 日韩在线操 | 亚洲欧美日韩综合久久久久 | 亚洲男人的天堂在线播放 | 亚洲欧美日韩一级特黄在线 | 欧美一级片免费观看 | 亚洲国产日产无码精品 | 欧美一卡二卡3卡4卡无卡六卡七卡科普 | 日韩黄a级成人毛片 | 午夜黄色网址 | 亚洲地址一地址二地址三 | 日本成人午夜 | 污污小视频在线观看 |