delphi XML 原来可以玩接口
以下代码旨在 脱离TXMLDocument 操作 xml
- unit Unit3;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;
- type
- TForm3 = class(TForm)
- XMLDocument1: TXMLDocument;
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- Button4: TButton;
- Button5: TButton;
- Button6: TButton;
- Memo1: TMemo;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- private
- public
- end;
- var
- Form3: TForm3;
- implementation
- uses eng;
- {$R *.dfm}
- procedure TForm3.Button1Click(Sender: TObject);
- var xml:IXMLDocument;root,node,data:IXMLNode;i:Integer;
- // nt:TNodeType;
- begin
- // 先来个中文版
- xml := NewXMLDocument; // 默认 1.0
- xml.Options := xml.Options + [doNodeAutoIndent]; // 缩进格式,而不是全在一行
- xml.Encoding :='gb2312'; // 支持中文
- xml.DocumentElement := xml.CreateNode('根节点'); // ntElement 表示节点
- // 一样意思,只能含有一个根节点
- // xml.AddChild('根节点'); // NameSpaceURI 我理解,不用管,是一个命名空间的路径地址
- root := xml.DocumentElement;
- root.Attributes['说明'] := '怎样不用 TXMLDocument 控件操作 XML文件';
- root.Attributes['版权'] := '归 DuoSoft 所有';
- root.Attributes['i'] := '这里显示i的值';
- i := root.AttributeNodes.IndexOf('版权');
- if i <> - then
- begin
- root.AttributeNodes[i].Text := '还是归大家所有吧';
- root.AttributeNodes[i+].NodeValue := i;
- end;
- node := xml.createElement_x_x_x('tag1','');
- node.Attributes['desc'] := '第1种添加节点方法';
- root.ChildNodes.Add(node);
- node := xml.CreateNode('tag2');
- node.Attributes['desc'] := '第2种添加节点方法';
- root.ChildNodes.Add(node);
- root.AddChild('tag3').Attributes['desc'] := '第3种添加节点方法';
- node := xml.CreateNode('备注',ntCData);
- node.Text := ''; // 备注 -> 1234
- root.ChildNodes.Add(node);
- node := xml.CreateNode('注释',ntComment);
- node.NodeValue := ; // 注释 -> 5678
- root.ChildNodes.Add(node);
- { for nt := ntReserved to ntNotation do
- begin
- i := Ord(nt);
- try
- node := xml.CreateNode('type'+IntToStr(i),nt);
- node.Attributes['desc'] := '类型'+IntToStr(i);
- root.ChildNodes.Add(node);
- except
- // node.Attributes['desc'] := '失败'+IntToStr(i);
- // 各自意义以后再研究★★★★★★★★★★★★★
- // TNodeType = (ntReserved, ntElement, ntAttribute, ntText, ntCData,
- // ntEntityRef, ntEntity, ntProcessingInstr, ntComment, ntDocument,
- // ntDocType, ntDocFragment, ntNotation);
- end;
- end; }
- data := root.AddChild('数据清单');
- with data.AddChild('record') do
- begin
- Attributes['ID'] := ;
- Attributes['Name'] := '张三';
- Attributes['sex'] := True;
- Attributes['Salary'] := 12.34;
- end;
- with data.AddChild('record') do
- begin
- Attributes['ID'] := ;
- Attributes['Name'] := '李四';
- Attributes['sex'] := True;
- Attributes['Salary'] := ;
- end;
- with data.AddChild('record') do
- begin
- Attributes['ID'] := ;
- Attributes['Name'] := '王五';
- Attributes['sex'] := false;
- Attributes['Salary'] := -90.1234;
- end;
- node := root.AddChild('备注');
- node.Attributes['年'] := ;
- node.Attributes['月'] := ;
- node.Attributes['日'] := ;
- node.Text := '建立了一份迷你表';
- // node.NodeName := 'NodeName'; // 不可修改
- // node.NodeValue := 'NodeValue'; // = node.Text
- // 以下代码很有趣!!!尽然合并到一起去了
- node.ChildNodes.Add(xml.CreateNode('再补充一个 ntText',ntText));
- i := node.AttributeNodes.Add(xml.CreateNode('时',ntAttribute));
- node.AttributeNodes[i].NodeValue := ;
- node.AttributeNodes.Add(xml.CreateNode('分',ntAttribute));
- node.Attributes['分'] := ;
- // node.AttributeNodes.Add(xml.CreateNode('秒',xxxx)); // 不支持 ntElement ntText ntComment 等其他类型
- // node.Attributes['秒'] := '还有秒?';
- xml.SaveToFile(ExtractFilePath(ParamStr())+'chn.xml');
- {
- 结果如下
- <?xml version="1.0" encoding="gb2312" ?>
- - <根节点 说明="怎样不用 TXMLDocument 控件操作 XML文件" 版权="还是归大家所有吧" i="1">
- <tag1 desc="第1种添加节点方法" />
- <tag2 desc="第2种添加节点方法" />
- <tag3 desc="第3种添加节点方法" />
- - <数据清单>
- <record ID="1" Name="张三" sex="true" Salary="12.34" />
- <record ID="2" Name="李四" sex="true" Salary="5678" />
- <record ID="3" Name="王五" sex="false" Salary="-90.1234" />
- </数据清单>
- <备注 年="2010" 月="7" 日="12" 时="16" 分="12">建立了一份迷你表再补充一个 ntText</备注>
- </根节点>
- }
- end;
- procedure TForm3.Button2Click(Sender: TObject);
- var xml:IXMLDocument;root,node,data:IXMLNode;
- begin
- // 节点变成英文的准备变成 接口
- xml := NewXMLDocument; // 默认 1.0
- xml.Options := xml.Options + [doNodeAutoIndent]; // 缩进格式,而不是全在一行
- xml.Encoding :='gb2312'; // 支持中文
- root := xml.AddChild('DuoXMLRoot');
- root.Attributes['desc'] := '怎样不用 TXMLDocument 控件操作 XML文件';
- root.Attributes['right'] := '归 DuoSoft 所有';
- node := xml.createElement_x_x_x('tag1','');
- node.Attributes['desc'] := '第1种添加节点方法';
- root.ChildNodes.Add(node);
- node := xml.CreateNode('tag2');
- node.Attributes['desc'] := '第2种添加节点方法';
- root.ChildNodes.Add(node);
- root.AddChild('tag3').Attributes['desc'] := '第3种添加节点方法';
- data := root.AddChild('MyData'); // 注意这个名字,等下会用到
- with data.AddChild('record') do
- begin
- Attributes['ID'] := ;
- Attributes['Name'] := '张三';
- Attributes['sex'] := True;
- Attributes['Salary'] := 12.34;
- end;
- with data.AddChild('record') do
- begin
- Attributes['ID'] := ;
- Attributes['Name'] := '李四';
- Attributes['sex'] := True;
- Attributes['Salary'] := ;
- end;
- with data.AddChild('record') do
- begin
- Attributes['ID'] := ;
- Attributes['Name'] := '王五';
- Attributes['sex'] := false;
- Attributes['Salary'] := -90.1234;
- end;
- node := root.AddChild('Memo');
- node.Attributes['yy'] := ;
- node.Attributes['mm'] := ;
- node.Attributes['dd'] := ;
- node.Text := '建立了一份迷你表';
- xml.SaveToFile(ExtractFilePath(ParamStr())+'eng.xml');
- end;
好了,有一个 eng.xml 接下去还得需要一下 TXMLDocument
XMLDocument1.FileName 选择 eng.xml
双击控件打开 wizard
选择第一个节点,再选择第二个节点。
把 Document Element Type 勾上
next finish
生成一个 eng.pas
use进来
接下去的代码如下:直接利用接口的概念操作刚才我们生成的那个 xml
- procedure TForm3.Button3Click(Sender: TObject);
- var dd:IXMLDuoXMLRootType;
- i: Integer;
- begin
- dd := LoadDuoXMLRoot(ExtractFilePath(ParamStr())+'eng.xml');
- dd.OwnerDocument.Options := dd.OwnerDocument.Options + [doAutoSave]; // 只要有修改就自动保存
- Memo1.Clear;
- for i := to dd.MyData.Count - do
- begin
- Memo1.Lines.Add('================='+inttostr(i)+'=================');
- Memo1.Lines.Add(IntToStr(dd.MyData[i].ID));
- Memo1.Lines.Add(dd.MyData[i].Name);
- Memo1.Lines.Add(dd.MyData[i].Sex);
- Memo1.Lines.Add(dd.MyData[i].Salary);
- if dd.MyData[i].ID = dd.MyData.Count then
- begin
- ShowMessage('改变最后一个值');
- dd.MyData[i].Salary := '123456789.0'; // 给你加薪
- end;
- end;
- end;
- end.
参考:http://www.cnblogs.com/key-ok/p/3380867.html
delphi XML 原来可以玩接口的更多相关文章
- Mybatis自动生成xml文件、dao接口、实体类
Mybatis可以通过逆向工程,实现自动生成xml文件.dao接口.实体类 以下使用的是Intellij Idea进行自动生成 一.首先,要在pom.xml中导入插件,在<build>中加 ...
- NativeXml: A native Delphi XML parser and writer
http://www.simdesign.nl/xml.html This software component contains a small-footprint Object Pascal (D ...
- WebService如何封装XML请求 以及解析接口返回的XML
原 WebService如何封装XML请求 以及解析接口返回的XML 置顶 2019年08月16日 15:00:47 童子泛舟 阅读数 28 标签: XML解析WebService第三方API 更多 ...
- Delphi Xml
用递归方法,使用 xml 文档生成 Treeview 树形视图.由于是动态生成,所以可以通过修改 xml 的逻辑来定制 Treeview 的结构,从而实现了 xml 对 Treeview 的动态配置, ...
- 一个关于Delphi XML处理单元的BUG
使用delphi的XML处理单元 XMLDoc XMLIntf 在获取XML文本内容的时候, 高版本的Delphi会丢失编码描述....在D7上却是正常的, 下面是测试源码: procedure TF ...
- 用soapUI测试xml格式的HTTP接口
有些HTTP接口是直接传递parameter的,有些HTTP请求是将parameter转换为xml串进行传递的.现在要分享的就是如何用soapUI实现xml串的HTTP接口测试. 工具/原料 so ...
- 如何把Mybatis的Mapper.xml配置文件和dao接口放在同一个包下
有的时候我们在Maven项目中写关于Mybatis的项目时,会涉及到很多的实体类,也就会涉及到很多的dao接口,如果此时我们仍然把dao接口和xml写在同一个包下,会让项目接口变得很乱,杂七杂八的,所 ...
- XML序列化与反序列化接口对接实战,看这篇就够了
关键字:c# .NET XML 序列化 反序列化 本文为接口对接实践经验分享,不对具体的XML概念定义进行阐述:涉及工具类及处理方法已在生产环境使用多年,可放心使用.当然如果你发现问题,或有不同想法, ...
- delphi XML简单处理
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...
随机推荐
- UVALive3713-Astronauts(2-SAT)
题目链接 题意:有A.B.C3个任务分配给n个宇航员,当中每一个宇航员恰好分配一个任务.如果n个宇航员的平均年龄为x,仅仅有年龄大于x的才干领取A任务:仅仅有年龄严格小于x的才干领取B任务,而任务C没 ...
- android 36 线程通信
安卓中一个程序跑起来叫进程,进程中至少有一个主线程.主线程用于处理用户的触摸操作和将触摸操作事件分发给响应的控件.如果进行消耗时间操作,下载,磁盘读取文件,不润许在主线程操作,只能在工作线程操作.主线 ...
- 支付宝手机网站支付流程(Node实现)
前言 公司M站要接入支付宝,借机研究了一下支付宝的支付流程.毕竟,只有公司才能拿到支付接口权限. 主要参考文档: https://doc.open.alipay.com/doc2/detail?tre ...
- block没那么难(三):block和对象的内存管理
本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 在上一篇文章中,我们讲了很多关于 ...
- svn 1.8.11 命令行提交新添加文件错误
由于公司的svn服务器版本不兼容最新的svn 1.8.11导致 提交代码报错 ➜ images svn ci arrowico.png -m"add images for png ico ...
- 关于css中伪类及伪元素的总结
css中的伪类和伪元素总是混淆,今天参考了很多资料,也查看了部分文档,现将伪类及伪元素总结如下: 一.由来: 伪类和伪元素的引入都是因为在文档树里有些信息无法被充分描述,比如CSS没有"段落 ...
- centos 6 搭建ftp服务器支持匿名读写
转载请注明: 凌云物网智科嵌入式实验室: http://iot-yun.com/ 郭文学<guowenxue@gmail.com> vsftpd在运行时一定要关闭SELinux,否 ...
- IntelliJ IDEA 14
新接触IntelliJ IDEA 14,使用起来还不是很称手,每天在使用中学习吧. 每学到一个新技能就来更新一下. (2015.11.17) " Ctrl + / " 代码批量注释 ...
- Uri、UriMatcher、ContentUris详解
http://blog.csdn.net/feng88724/article/details/6331396 1.Uri 通用资源标志符(Universal Resource Identifier, ...
- mysql - 初探
1,查询所有数据库名称: show databases; 2,查询所有表: use database_name; show tables; 3,查询表中的所有字段: desc table_name;