请问如何在Delphi中读写XML文档?(100分)

  • 主题发起人 folmorse
  • 开始时间
F

folmorse

Unregistered / Unconfirmed
GUEST, unregistred user!
最好给个例子,解释一下各个对象的作用,什么是IXMLDOMDocument,IXMLDOMNode等等。
谢谢!
 
http://www.techvanguards.com/
看看Biny的Step by Step教程
 
Keywords: XML 文档
http://www.delphibbs.com/delphibbs/dispq.asp?lid=221384
建议仔细看看Delphi的帮助以及自带的例子。随便给了两个名词让别人说...
 
转贴一篇:
希望合你口味。
Delphi6 中XML 文档的应用
XML文档是新一代的Web数据格式。它可以用树的形式储存一切数据。
下面介绍一下TXMLDocument控件的一些用法:
已定义:
XMLDoc: TXMLDocument;
EncoderMIME: TIdEncoderMIME;
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(RootTreeNode:TTreeNode;
XMLTreeNode:IXMLNode);
var i:integer;
c:TTreeNode;
begin

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

begin

c:=xmltree.Items.AddChild(RootTreeNode,XMLTreeNode.ChildNodes.Nodes.NodeName);
ReadXMLTree(c,XMLTreeNode.ChildNodes.Nodes);
end;

end;

使用方法
ReadXMLTree(nil,xmldoc.Node);
当然要先加载XML文档 J ^_^
-------------------------------------------Power by Liu Yang 2002-2-8
My email: ly_liuyang_ly@21cn.com
Home page: http://lyhome.3322.net
一个利用XML的例子:LY FTP Explorer中的Site Manager文件
可以从我的主页下载。
 
非常好............
 
我也正需要这方面的东东,太感谢basin的精彩解答了!!!![:)]
 
basin的的确很有用,
非常感谢
————csdn的竹叶上也有几篇xml的文章,可以去看一下
 
顶部