Delphi6/7 中XML 文件的應用 (轉)

worldblog發表於2007-12-12
Delphi6/7 中XML 文件的應用 (轉)[@more@]

6/7 中 文件的應用


microsoft-com::office" />


XML文件是新一代的資料格式。它可以用樹的形式儲存一切資料。


下面介紹一下TXMLDocument的一些用法:


已定義:


XMLDoc: TXMLDocument;


EncodeME: TncoderMIME;


DecoderMIME: TIdDecoderMIME;


xn:IXMLNode;


f:TFileStream;


EncoderMIME和DecoderMIME是Indy控制元件中的Mime工具,用來把所有型別的字串轉換為Mime(Base64)的ASCII碼,你用其他的編碼方式也可以的,比如:UUE,XXE。


XN是XML文件的樹結點。F是流。


首先,載入XML文件


  xmldoc.LoadFromFile(‘XML文件的檔名');


  xmldoc.Active:=true; //使XML文件變為活動


再次,定位Xn在XML文件中的位置(假設是的二層的第四個節點)


  xn:=xmldoc.Node;


  xn:=xn.ChildNodes.Nodes[1];  //節點數是從零開始的,所以要減一


 xn:=xn.ChildNodes.Nodes[3];


接著,


增加下一級節點


  xn:=xn.AddChild(‘新的節點名字’)


  xn.Text:=’節點的文字內容’


  xn.Attributes['節點的第一個屬性']:=’屬性值’


xn.Attributes['節點的第二個屬性']:=’屬性值’


  修改節點,(節點的名字是不能改的)


  xn.Text:=’新的文字內容’


  xn.Attributes['節點的第二個屬性']:=’ 新的屬性值’


  刪除節點Xn


  xn.ParentNode.ChildNodes.Delete(xn.ParentNode.ChildNodes.IndexOf(xn));


利用Xn.Text存放檔案,


  f:=TFileStream.Create('要存放的檔名',fmOpenRead);


  xn.Text:=EncoderMime.Encode(f); //轉換格式,檔案編碼


  f.Free;


解出Xn.Text中的檔案,


  f:=TFileStream.Create(‘目標檔名’,fmCreate);


  DecoderMime.DecodeToStream(xn.Text,f);


  f.Free;


最好利用Xn.attribute來增加一個屬性來表示檔案的編碼方式,比如


  xn.Attributes['Type']='Base64'


這樣改上面的兩個片段為:


  xn.Attributes['Type']:='Base64';


  f:=TFileStream.Create('要存放的檔名',fmOpenRead);


  xn.Text:=EncoderMime.Encode(f);



  f.Free;


if xn.IsTextElement  //Xn中存在Text


  then if xn.HasAttribute('Type') then  //Xn中存在屬性’Type’


  if xn.Attributes['Type']='Base64' then


  begin


  f:=TFileStream.Create(‘目標檔名’,fmCreate);


  DecoderMime.DecodeToStream(xn.Text,f);


   f.Free;


  end;


最後給出一個利用TTreeView來顯示XML文件的所有樹結構


XMLTree是TTreeView類


procedure TForm1.ReadXMLTree(TreeNode:TTreeNode; XMLTreeNode:IXMLNode);


var i:integer; c:TTreeNode;


begin


  for i:=0 to XMLTreeNode.ChildNodes.Count-1 do


   begin


  c:=xmltree.Items.AddChild(RootTreeNode,XMLTreeNode.ChildNodes.Nodes[i].NodeName);


  ReadXMLTree(c,XMLTreeNode.ChildNodes.Nodes[i]);


  end;


end;


使用方法


  ReadXMLTree(nil,xmldoc.Node);


當然要先載入XML文件 J ^_^

至於使用XML文件作為In-memory就要用Delphi6/7的XML Map Tool了,先建立一個最簡單的XML文件,再用MappingTool生成.XTR檔案,用TXMLDataSetProvider作為資料提供者,TdataSet連線,搞個TTable就可以把XML作為資料庫用了,詳細的請看Delphi6/7的Demos目錄下的InteXMLTranormProvider!

-------------------------------------------Power by Liu Yang 2002-2-8

/ by LY or


一個利用XML的例子:LY Explorer中的Site Manager檔案


可以從我的主頁。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991899/,如需轉載,請註明出處,否則將追究法律責任。

相關文章