没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2007-10-19 09:38:15.000|阅读 2411 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
Delphi 中对 XML 文件的解析做的很好,比直接使用 MS 的 MSXML2_TLB 中的接口要方便很多,现称述于下面。
在讲之前先给出一个 XML 实例,在讲某些部分是要结合实例比较容易理解。
1<?xml version="1.0" encoding="gb2312"?> <!--文档版本信息, 注释格式同 HTML-->
2<XMLPackage>
3 <clinetinfo ip=”202.101.100.90” handler=”si” unit=”江苏网商软件”/>
4 <data>
5 <row id=”1” name="太阳" sex=”男” age="24" duty="软件工程师"/>
6 <row id=”2” name="月亮" sex=”女” age="25" duty="部门经理"/>
7<!--data 中包含了元素 row 的两个实例,通过属性 id 予以区分 -->
8 </data>
9 <memo length=”16” color=” $0034494B”>Hello! I am yaya! </memo> <!-- 这个元素中间包含的内容成为 Text,而且也含有两个属性 length, color, 当然也可以没有属性 -- >
10 <Actions acition=”update/insert”/> <!—该元素描述了一动作控制信息-->
11</XMLPackage>
TXMLDocument 控件提供了我们两种常用做法:一、直接用这个类封装的属性和方法来读写 XML 文件,我把它称为自己解析法;二、用控件提供的 XML Data Binding Wizard 来创建一个适合用户自己的接口单元,然后按照这个接口单元提供的许多接口来实现对同类 XML 文件的读写,十分方便,但有局限性,我把它称为控件解析法。我重点讲第一种使用方法。
一、自己解析法:
下面我将按创建、读取、修改、添加和删除这五个动作来分三类讲述。
(1)创建和添加:
首先要创建 XML 实例,可以这样动态创建:
TXMLDocument.Create(‘F:\Work\费亚的文件\task\XML\lab_xml\country.xml’);
也可以这样动态创建:
Xml:= TXMLDocument.Create(nil);
Xml. LoadFromFile(‘F:\Work\费亚的文件\task\XML\lab_xml\country.xml’);
当然也可以从 Internet 面板上拖放一个 TXMLDocument 控件,然后再为 FileName 或 XML 属性赋值,比如对象名仍然叫 xml(下都不说明都这样默认):
Xml.FileName:= F:\Work\费亚的文件\task\XML\lab_xml\country.xml;
至于它的另一个属性 XML 是用来直接赋 XML 语言,这个用法对我们暂不重要。创建完 XML 实例后要注意打开 Active 属性:
Xml.active:=true;
这样下面对文件的读写操作才有效。如果没有 XML 文件可以用来创建 XML 的实例,即要建立 XML 文件,可以选择在上面一句之后,对 XML 实例操作,操作完毕之后加上:
Xml.SaveToFile(‘F:\Work\费亚的文件\task\XML\lab_xml\country.xml’);
下面就是创建节点了,需要结合上面的 XML 文件实例来讲述。首先一个 XML 文件只能有一个根节点,比如文件实例中2行的 XMLPackage 是这样被创建的:
Var rootnode:XMLNode;
Rootnode:=xml.CreateNode(‘XMLPackage’);
Xml. DocumentElement:=rootnode;
接着我们创建不同类型的子节点,前面的实例中的第9行的节点比较有代表性,它是一个带有文本的子节点,同时又带有两个属性节点,我们来看看它是怎么被创建的,首先创建一个根节点:
xml.Active:=true;
xml.DocumentElement:=xml.CreateNode(''''XMLPacage'''');
接着我们创建 memo 子节点:
Var node:IXMLNode;
node:=xml.CreateNode(''''memo'''');
xml.DocumentElement.ChildNodes.Add(node);
这种创建儿子节点的方法比较好,当然还可以:
xml.DocumentElement.AddChild(''''XMLPacage'''');
来创建,建议使用第一种,CreateNode 方法的用法是很丰富的,主要看它的第二个参数,上面其实是用了默认参数,下面我再看看怎样创建这个子节点的文本的:
node.ChildNodes.Add(xml.CreateNode(''''Hello! I am yaya!'''',ntText));
注意 CreateNode 方法的第二个参数,我们继续看属性是怎么创建的:
node.AttributeNodes.Add(xml.CreateNode(''''length'''',ntAttribute));
node.SetAttribute(''''length'''',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;
到此我们就结束了创建,至于添加,即插入节点,要插在指定节点后将上面的 add(const Node: IXMLNode)方法换成 Insert(Index: Integer; const Node: IXMLNode),其它用法也就一目了然,不再详述了。
(2)读取和修改
读取比较简单,主要是读取子节点的文本和属性值,方法是比较简单,关键就是要利用 IXMLNodeList 接口来提供的一些属性和方法来循环搜索到指定节点就 OK 了。文本和属性值的读取方法在 delphi 中提供的方法有很多,我就讲一种:NodeValue 属性,它是 IXMLNode 接口的一个属性,它的值是 OleVariant 类型,意味着我们在 XML 文件里虽然都是存的字符串,但 delphi 会帮我们来转换数据格式,比如有个属性节点叫 node:
Node.NodeValue:=16;//16是 integer 类型
虽然在 XML 文件中保存的是 ASCII 格式的16,但当我们要读取的时候 delphi 还会帮我们换回来的,只要这样就可以了:
Var len:integer;
Len:=node.NodeValue;
当然我们要注意的就是,用这种方法读取的时候最好先查看同一节点的 NodeType 属性,因为有几种类型的节点避免发生异常。
上面讲的都是读和写节点的值,有时候也要读和写节点名,就要访问 NodeName 属性,使用方法大概相同,也要结合 NodeValue 来使用:
读取就完了,当然我们上面是通过接口的属性来做的,接口也有方法来完成,就不说了,对上面的几个属性都是可读可写的,所以修改也基本清楚了。
(3)删除
删除主要给出了删除指定节点,主要是看 IXMLNodeList 接口的几个方法,Clear 和 Delete 方法,其中前一个是全部清空,后一个是删除指定的子节点,这个方法是重载的,可以按名字也可以按顺序号,即 Count 属性,非常方便!
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:csdn面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号