kbmmw 中XML 操作入门
delphi 很早以前就自带了xml 的操作,最新版里面有三种XML 解释器,一种是MSXML,看名字就知道
这个是微软自带的,这个据delphi 官方称是速度是最快的,但是只能在windows 上使用。另外两个是
OmniXML, ADOM, 这两个都是跨平台的。但是速度比MSXML 慢点。在delphi 10.2 里面,WINDOWS
应用默认使用MSXML, linux 应用默认使用OmniXML。 当然也可以通过强行改变
今天我们讲一下如何使用kbmmw 内置的XML 解释器处理XML . 为什么要使用kbmmw 的XML 解释器呢,
主要原因是跨平台,同时作者号称其速度很快(我没有做具体的比较),最重要的是它可以与JSON,YAML,BSON
直接互相转换。
首先,在kbmmw 的XML 里面,主要有两个对象,一个是TkbmMWDOMXML,他代表着整个XML 对象,另外
一个就是TkbmMWDOMXMLNode,它代表XML 中的节点。
我们建一个最简单的XML 对象。
procedure TForm2.Button1Click(Sender: TObject);
var
dom:TkbmMWDOMXML;
node:TkbmMWDOMXMLNode;
begin
memo1.Lines.Clear;
dom:=TkbmMWDOMXML.Create;
try
dom.PreserveWhiteSpace:=true;
dom.AutoLineFeed:=true; node:=TkbmMWDOMXMLNode.Create(dom);
node.Name:='xml';
node.IsDeclaration:=true;
node.AttribByName['version']:='1.0';
node.AttribByName['encoding']:='UTF-8';
node.AttribByName['standalone']:='no'; dom.Root.Nodes.AddNode(node);
memo1.Lines.Add(dom.SaveToString(nil));
finally
dom.Free;
end; end;
运行结果如下:
<?xml version="1.0" encoding="UTF-" standalone="no" ?>
我们可以继续加入一个节点。
procedure TForm2.Button1Click(Sender: TObject);
var dom:TkbmMWDOMXML;
node:TkbmMWDOMXMLNode;
begin
memo1.Lines.Clear;
dom:=TkbmMWDOMXML.Create;
try
dom.PreserveWhiteSpace:=true;
dom.AutoLineFeed:=true; node:=TkbmMWDOMXMLNode.Create(dom);
node.Name:='xml';
node.IsDeclaration:=true;
node.AttribByName['version']:='1.0';
node.AttribByName['encoding']:='UTF-8';
node.AttribByName['standalone']:='no';
dom.Root.Nodes.AddNode(node); node:=TkbmMWDOMXMLNode.Create(dom);
node.Name:='creator';
node.Data:='xalion';
dom.root.Nodes.AddNode(node); memo1.Lines.Add(dom.SaveToString(nil));
finally
dom.Free;
end; end;
运行结果如下:
<?xml version="1.0" encoding="UTF-" standalone="no" ?>
<creator>xalion</creator>
继续插入一组数据
procedure TForm2.Button1Click(Sender: TObject);
var
dom:TkbmMWDOMXML;
node,datanode,rownode:TkbmMWDOMXMLNode;
i: Integer;
begin
memo1.Lines.Clear;
dom:=TkbmMWDOMXML.Create;
try
dom.PreserveWhiteSpace:=true;
dom.AutoLineFeed:=true; node:=TkbmMWDOMXMLNode.Create(dom);
node.Name:='xml';
node.IsDeclaration:=true;
node.AttribByName['version']:='1.0';
node.AttribByName['encoding']:='UTF-8';
node.AttribByName['standalone']:='no';
dom.Root.Nodes.AddNode(node); node:=TkbmMWDOMXMLNode.Create(dom);
node.Name:='creator';
node.Data:='xalion';
dom.root.Nodes.AddNode(node); datanode:=TkbmMWDOMXMLNode.Create(dom);
datanode.Name:='result';
dom.Root.Nodes.AddNode(datanode); for i := to do
begin rownode:=TkbmMWDOMXMLNode.Create(dom);
rownode.Name:='row';
node:=TkbmMWDOMXMLNode.Create(dom);
node.name:='id';
node.SetAsInt(i);
rownode.Nodes.AddNode(node);
node:=TkbmMWDOMXMLNode.Create(dom);
node.name:='name';
node.Data:='xalion';
rownode.Nodes.AddNode(node);
node:=TkbmMWDOMXMLNode.Create(dom);
node.name:='date';
node.SetAsDateTime(now);
rownode.Nodes.AddNode(node); datanode.Nodes.AddNode(rownode); end; memo1.Lines.Add(dom.SaveToString(nil));
finally
dom.Free;
end; end;
输出结果如下:
<?xml version="1.0" encoding="UTF-" standalone="no" ?>
<creator>xalion</creator>
<result>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
<row>
<id xsd:type="int"></id>
<name>xalion</name>
<date xsd:type="datetime">--24T01::51.761+:</date>
</row>
</result>
上面介绍了kbmmw 中XML 的建立操作,那么如何访问这些节点呢?
最简单的方法就是遍历,一个一个找,但是这种方法太麻烦。在kbmmw 中可以通过路径来
访问节点。
procedure TForm2.Button2Click(Sender: TObject);
var
dom:TkbmMWDOMXML;
node,datanode,rownode:TkbmMWDOMXMLNode;
begin memo2.Lines.Clear;
dom:=TkbmMWDOMXML.Create;
try
dom.LoadFromString(memo1.Lines.Text); node:=dom.getnode('//creator');
if node<>nil then
memo2.Lines.Add(node.Data)
finally
dom.Free
end;
end;
运行结果如图
继续复杂一点的
procedure TForm2.Button2Click(Sender: TObject);
var
dom:TkbmMWDOMXML;
node,datanode,rownode:TkbmMWDOMXMLNode;
i: Integer;
j: Integer;
begin memo2.Lines.Clear;
dom:=TkbmMWDOMXML.Create;
try
dom.LoadFromString(memo1.Lines.Text); datanode:=dom.getnode('//result');
if datanode<>nil then
begin
if datanode.Nodes.Count> then
begin
for i := to datanode.Nodes.Count- do
begin
rownode:=datanode.Nodes[i]; for j := to rownode.Nodes.Count- do
begin
node:=rownode.Nodes[j];
if node<>nil then
memo2.Lines.Add(node.Data);
end;
end;
end;
end;
finally
dom.Free
end;
end;
运行结果如图:
基本上就是这样了。
kbmmw 中XML 操作入门的更多相关文章
- kbmmw 中XML 操作入门(跨平台,而且可以与JSON,YAML,BSON 直接互相转换)
delphi 很早以前就自带了xml 的操作,最新版里面有三种XML 解释器,一种是MSXML,看名字就知道 这个是微软自带的,这个据delphi 官方称是速度是最快的,但是只能在windows 上使 ...
- kbmmw 中JSON 操作入门
现在各种系统中JSON 用的越来越多.delphi 也自身支持JSON 处理. 今天简要说一下kbmmw 内部如何使用和操作JSON. kbmmw 中json的操作是以TkbmMWJSONStream ...
- java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查
一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...
- C#中xml操作
序列化成一个字符串: public static string XMLSerialize<T>(T entity) { StringBuilder buffer = new StringB ...
- T-Sql(五)xml操作
t-sql中的xml操作在我们平时做项目的过程中用的很少,因为我们处理的数据量很少,除非一些用到xml的地方,t-sql中xml操作一般用在数据量很大,性能优化的地方,当然我在平时做项目的时候也是没用 ...
- kbmmw 中虚拟文件操作入门
kbmmw 中一直有一个功能,但是基本上都没有提过,但是在实际应用中,却非常有用,这个功能就是 虚拟文件包功能,他可以把一大堆文件保存到一个文件里面,方便后台管理. kbmmw 的虚拟文件在单元kbm ...
- 在C#.net中如何操作XML
在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...
- 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】
一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...
- 第二篇 -- C#中对XML操作
一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...
随机推荐
- Karma - MVC Framework for Unity3D
Karma is an MVC framework for Unity3D. Because of how Unity is structured, it actually turns out to ...
- TZOJ 3209 后序遍历(已知中序前序求后序)
描述 在数据结构中,遍历是二叉树最重要的操作之一.所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问. 这里给出三种遍历算法. 1.中序遍历的递归算法定义: ...
- f5源站获取http/https访问的真实源IP解决方案
1.背景 F5负载均衡设备,很多场景下需要采用旁挂的方式部署.为了保证访问到源站的数据流的request和response的TCP路径一致,f5采用了snat机制.但是这样导致源站上看到的来源IP都是 ...
- Win7系统不能记忆窗口大小与位置解决方法
似在某此系统优化后,无意发现系统在注销或重启后,打开资源管理器,它以默认大小及位置显示. 对于习惯自定义操作来说,甚为不便,遍找方法未有奏效者,但总萦绕心头,时时记起. 今日再找问题解决方法,难兄难弟 ...
- linux命令学习之:touch
touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来:二是用来创建新的空文件. 语法 touch(选项)(参数) 选项 -a:或-- ...
- Activity 的启动过程深入学习
手机应用也是一个app,每一个应用的icon都罗列在Launcher上,点击icon触发onItemClick事件. 我们要启动「淘宝」这个App,首先我们要在清单文件定义默认启动的Activity信 ...
- 关于界面绘制过程多次回调ondraw()方法产生的问题
最近项目中,出现一个问题,要做成的效果是这样的,但是一进去就变成这样了, 后来发现,刚进去是正常的,一闪而过,就变成全部了. 界面绘制过程,ondraw() 会被多次回调. 就是说在第一次绘制的时候是 ...
- Beanstalkd消息队列的安装与使用
一.Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二.Beanstalkd特性 1.支持优先级(支持任务插队)2.延迟(实现定时任务)3.持久化(定时把内存中 ...
- mysql 主从数据不一致 Slave_SQL_Running: No 解决方法
在slave服务器上通过如下命令 mysql> show slave status\G; 显示如下情况: Slave_IO_Running: Yes Slave_SQL_Running: No ...
- localstorage和vue结合使用2
html <template> <div class="hello"> <div class="page-top"> < ...