delphi中txmldocument控件的用法
delphi中對xml文件的解析做的很好,比直接使用ms的msxml2_tlb中的接口要方便很多,現稱述於下面。,現稱述於下面。
在講之前先給出一個xml實例,在講某些部分是要結合實例比較容易理解。,在講某些部分是要結合實例比較容易理解。
1 <?xml版本=“ 1.0” encoding =“ gb2312”?> <! - 文檔版本信息,註釋格式同,註釋格式同html->
2 <xmlpackage>
3 <clinetinfo ip =“ 202.101。
4 <data>
5 <行ID =”
6 <行ID =”
7 <! - 數據中包含了元素行的兩個實例,通過屬性-id予以區分->
8 </data>
9 <memo長度=”
10 <操作action =“ update/insert”/> <! - 該元素描述了一動作控制信息->
11 </xmlpackage>
txmldocument控件提供了我們兩種常用做法:一、直接用這個類封裝的屬性和方法來讀寫 xml文件,xml數據綁定嚮導來創建一個適合用戶自己的接口單元,然後按照這個接口單元提供的許多接口來實現對同類xml文件的讀寫,十分方便,但有局限性,我把它稱為控件解析法。我重點講第一種使用方法,我把它稱為控件解析法。我重點講第一種使用方法。
一、自己解析法:
下面我將按創建、讀取、修改、添加和刪除這五個動作來分三類講述。
( 1 )創建和添加::
首先要創建xml實例,可以這樣動態創建::
txmldocument.Create('f:/work/work/task/xml/lab_xml/country.xml');
也可以這樣動態創建:
XML:= txmldocument.create(nil);
XML。 loadFromFile('f:/work/費亞的文件/task/xml/lab_xml/country.xml');
當然也可以從互聯網面板上拖放一個txmldocument控件,然後再為文件名或xml屬性賦值,比如對象名仍然叫xml (下都不說明都這樣默認):
xml.fileName:= f:/work/費亞的文件/task/xml/lab_xml/country.xml;
至於它的另一個屬性xml xml語言
xml.Active:= true;
這樣下面對文件的讀寫操作才有效。如果沒有xml xml的實例,即要建立xml文件,可以選擇在上面一句之後
xml.savetofile('f:/work/費亞的文件/task/xml/lab_xml/country.xml');
下面就是創建節點了,需要結合上面的xml文件實例來講述。首先一個xml文件只能有一個根節點
var rootnode:xmlnode;
rootNode:= xml.createnode('xmlpackage');
XML。紀錄片:= rootNode;
接著我們創建不同類型的子節點,前面的實例中的第,前面的實例中的第,它是一個帶有文本的子節點,同時又帶有兩個屬性節點,我們來看看它是怎麼,我們來看看它是怎麼被創建的,首先創建一個根節點::
xml.Active:= true;
xml.documentElement:= xml.createnode('xmlPacage');
接著我們創建備忘錄::
var節點:ixmlnode;
節點:= xml.createnode('memo');
xml.documentElement.ChildNodes.Add(node);
這種創建兒子節點的方法比較好,當然還可以::
xml.documentElement.Addchild('xmlPacage');
來創建,建議使用第一種,createNode方法的用法是很豐富的
node.childnodes.add(xml.createnode('Hello!i是yaya!',nttext));
注意createNode方法的第二個參數,我們繼續看屬性是怎麼創建的::
node.attributenodes.add(xml.createnode('length',ntattribute));
node.setAttribute('長度',16);
node.attributenodes.add(xml.createnode('color',ntattribute));
node.setAttribute('color',$ 0034494b);
最後別忘了保存哦:
xml.savetofile('f:/work/費亞的文件/task/xml/lab_xml/test.xml');
xml.Active:= false;
到此我們就結束了創建到此我們就結束了創建一目了然,不再詳述了。,不再詳述了。
2)讀取和修改
讀取比較簡單,主要是讀取子節點的文本和屬性值,方法是比較簡單,關鍵就是要利用ixmlnodelist接口來提供的一些屬性和方法來循環搜索到指定節點就ok讀取方法在delphi中提供的方法有很多,我就講一種:nodeValue屬性,它是ixmlnode接口的一個屬性,它的值是olevariant類型,意味著我們在xml文件裡雖然都是存的字符串,但delphi會幫我們來轉換數據格式,比如有個屬性節點叫節點:
Node.NodeValue:= 16; // 16是整數類型
雖然在xml文件中保存的是aascii格式的16,但當我們要讀取的時候delphi還會幫我們換回來的,只要這樣就可以了::
var len:整數;
len:= node.nodevalue;
當然我們要注意的就是,用這種方法讀取的時候最好先查看同一節點的,用這種方法讀取的時候最好先查看同一節點的,屬性,因為有幾種類型的節點避免發生異常,對照如下::
結節型 | 節點值 |
ntattribute屬性節點 | 屬性的值 |
ntelement元素節點 | 如果這個節點沒有子節點,就返回它的文字,否則有異常 |
nttext文本節點 | 文字的內容 |
上面講的都是讀和寫節點的值,有時候也要讀和寫節點名,就要訪問nodename屬性
結節型 | nodename |
ntattribute屬性節點 | 屬性的名字 |
ntelement元素節點 | 節點的名字 |
nttext文本節點 | '#文字' |
讀取就完了,當然我們上面是通過接口的屬性來做的,接口也有方法來完成,就不說了,對上面的幾個屬性都是可讀可寫的,所以修改也基本清楚了。
3(3)刪除
刪除主要給出了刪除指定節點,主要是看ixmlnodelist接口的幾個方法,clear delete方法,其中前一個是全部清空,後一個是刪除指定的子節點,這個方法是重載的,可以按名字,可以按名字也可以按順序號,即,計數,非常方便!,非常方便!
二、控件解析法:
為控件的文件名屬性選擇一個xml樣板文件,然後由擊控件選擇xml數據綁定嚮導…,在這個嚮導中間會創建一個xdb文件。在彈出的嚮導中,第一頁中,可以看到把xml文件中的各個節點對應到了接口,這裡你可以展開每個節點,編輯每個節點的屬性數據類型。單擊,下一個,這裡你可以看到delphi生成了各個節點接口的框架代碼。finsh完成嚮導,這樣delphi xdb xml xml xml xml xml文件時,只需要參照生成的xml接口單元里的方法和屬性就能很方便的讀取節點:
var xml:ixmlxmlpackageType; //通過嚮導生成的根接口
開始
XML:= loadXmlPacage(''f:/work/work/費亞的文件/task/xml/lab_xml/test.xml'); //這個方法也是生成的接口單元中的。
xml.data.Row [1] .name; //比如我要取得數據下的第2個行中的名稱屬性。
很方便的,完全可以只要一個這樣的接口單元就可以了,其它的什麼都可以不要。接口單元中除了loadxmlPacage方法還有newxmlpacage方法和getxmlPacage方法,這三個方法是可以用於獲得剛開始的xml實例對象的,同時這個單元中所有新的接口也是繼承ixmlnode接口的,xml實例,其它格式的要再重新創建一個對應的xml接口單元才可以。
時間:
作者:費亞