Delphi6/7 中XML 文档的应用

摘要:
=真;=xmldoc.Node;=xn.ChildNodes.Nodes[3];=Xn表示。AddChild('新节点名称')xn。文本:='节点的文本内容'xn。属性[“节点的第一个属性”]:=“属性值”xn。属性[“节点的第二个属性”]:=“新文本内容”xn。属性[“节点的第二个属性”]:

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-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 Mapping Tool了,先建立一个最简单的XML文档,再用MappingTool生成.XTR文件,用TXMLDataSetProvider作为数据提供者,TdataSet连接,搞个TTable就可以把XML作为数据库用了,详细的请看Delphi6/7的Demos目录下的InternetXMLTransformProvider!

http://www.cnblogs.com/toosuo/archive/2007/12/17/1001453.html

免责声明:文章转载自《Delphi6/7 中XML 文档的应用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CSS-calc 兼容写法uC/OS II 函数说明 之–OSTaskCreate()与OSTaskCreateExt()下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue-router(基础)_滚动行为和history模式

一、前言                                                                                                                   1、滚动事件                                2、h5 history模式 二、主要内容 ...

python egg

经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到easy_install命令。easy_install是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令,它用来安装egg包。egg包是目前最流行的python应用打包部署方式。如何制作和安装egg包...

Unity打开VisualStudio一直显示hold on的解决办法(自醒)

我的VS版本:Visual Studio Community2022     我的Unity版本:unity2020.3.24     我的Visual版本:vs2022 我一开始在unity hub下载自带的2019版本,可气的是他直接装我C盘上了,我就给卸载了。又去官网上下载了最新版本,在unity里面配置好了启动器 问题:我Visual单独点击可以...

vue+elementui 中 @keyup 键盘上下左右移动聚焦

            <template>             <el-table :data="CreditUnclearOutlineList" border style=" 100%" ref="table"> <el-table-co...

Linux中vi显示中文乱码的问题

由于在windows下默认是gb编码,而我的vim默认是utf-8(gedit默认也是utf-8),所以打开会成乱码。修改了一下配置文件,使vi支持gb编码就好了。$vi ~/.vimrclet &termencoding=&encodingset fileencodings=utf-8,gbk$:wq再次打开vi,显示就正常了。vim中编...

Python之Pandas应用函数(apply),将多个值返回到Pandas dataframe中的行

处理数据中总是会遇到这种需求,对一列数据处理用自定义的函数处理后,会有多个返回值,需要创建新的列来存储新生成的返回值; 搜索中发现了留住的方法,返回pd.Series格式;或者生成列表,但是生成列表的方法,我一直试验不成功,后续还要再多一些尝试; 谢谢楼主的分享: https://codeday.me/bug/20180820/223407.html 1、...