delphi 很早以前就自带了xml 的操作,最新版里面有三种XML 解释器,一种是MSXML,看名字就知道

这个是微软自带的,这个据delphi 官方称是速度是最快的,但是只能在windows 上使用。另外两个是

OmniXMLADOM, 这两个都是跨平台的。但是速度比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 操作入门的更多相关文章

  1. kbmmw 中XML 操作入门(跨平台,而且可以与JSON,YAML,BSON 直接互相转换)

    delphi 很早以前就自带了xml 的操作,最新版里面有三种XML 解释器,一种是MSXML,看名字就知道 这个是微软自带的,这个据delphi 官方称是速度是最快的,但是只能在windows 上使 ...

  2. kbmmw 中JSON 操作入门

    现在各种系统中JSON 用的越来越多.delphi 也自身支持JSON 处理. 今天简要说一下kbmmw 内部如何使用和操作JSON. kbmmw 中json的操作是以TkbmMWJSONStream ...

  3. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

  4. C#中xml操作

    序列化成一个字符串: public static string XMLSerialize<T>(T entity) { StringBuilder buffer = new StringB ...

  5. T-Sql(五)xml操作

    t-sql中的xml操作在我们平时做项目的过程中用的很少,因为我们处理的数据量很少,除非一些用到xml的地方,t-sql中xml操作一般用在数据量很大,性能优化的地方,当然我在平时做项目的时候也是没用 ...

  6. kbmmw 中虚拟文件操作入门

    kbmmw 中一直有一个功能,但是基本上都没有提过,但是在实际应用中,却非常有用,这个功能就是 虚拟文件包功能,他可以把一大堆文件保存到一个文件里面,方便后台管理. kbmmw 的虚拟文件在单元kbm ...

  7. 在C#.net中如何操作XML

    在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...

  8. 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】

    一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...

  9. 第二篇 -- C#中对XML操作

    一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...

随机推荐

  1. Mac下Chrome浏览器的手机模拟器,开启模拟定位

    项目接入百度地图,浏览器调试时需要获取定位信息. 1 打开设置->高级->内容设置->位置,将定位设置为“使用前先询问”,并清空禁止列表. 2 审查元素->Network-&g ...

  2. TZOJ 4325 RMQ with Shifts(线段树查询最小,暴力更新)

    描述 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each que ...

  3. AtCoder Regular Contest 092 C - 2D Plane 2N Points(二分图匹配)

    Problem Statement On a two-dimensional plane, there are N red points and N blue points. The coordina ...

  4. WAV与PCM

    转: 1.PCM格式介绍: PCM(Pulse Code Modulation)也被称为 脉码编码调制.PCM中的声音数据没有被压缩,如果是单声道的文件,采样数据按时间的先后顺序依次存入.(它的基本组 ...

  5. c#: TabControl隐藏选项卡(WizardPages)

    如Delphi之TPageControl控件,其TTabSheet有TabVisible属性,在制作类似Wizard页面切换时,甚为有用. 而c#对应之TabControl控件,其页面TabPage无 ...

  6. maven 转化gradle

  7. mysql乐观锁总结和实践(一)

    最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下: 悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持 ...

  8. vue2.0生命周期详解

    首先上图展 <template> <div id="home"> <p>{{ message }}</p> </div> ...

  9. vue 初识组件

    Vue.component("greeting",{ template: `<p>{{ name }}大家好 <button v-on:click="c ...

  10. Sublime Text3 常用快捷键必看

    Sublime Text3 常用快捷键必看  https://blog.csdn.net/md1688/article/details/53043525