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. Array 遍历数组

    public static void main(String args){ int a[][] = new int[3][4]; for(int i=0;i<a.length;i++){ for ...

  2. FZU2150 :Fire Game (双起点BFS)

    传送门:点我 题意:“#”是草,"."是墙,询问能不能点燃俩地方,即点燃俩“#”,把所有的草烧完,如果可以,那么输出最小需要的时间,如果不行输出-1 思路:暴力BFS,看到n和m都 ...

  3. composer windows安装,使用新手入门

    一.前期准备: 1.下载安装包,https://getcomposer.org/download/ 2.在php.ini文档中打开extension=php_openssl.dll 3.下载php_s ...

  4. idea不识别yml配置文件,怎么办?

      问题描述: 如下图,新建的springboot项目,添加了自定义的配置文件后,2.yml无法像上方文件的一样,被识别成配置文件! 虽然可能不会影响项目(不确定),但问题不解决,根本没有心情开始下一 ...

  5. 775. Global and Local Inversions局部取反和全局取反

    [抄题]: We have some permutation A of [0, 1, ..., N - 1], where N is the length of A. The number of (g ...

  6. Django xadmin后台添加富文本编辑器UEditor的用法

    效果图: 步骤: 1.利用命令:pip install DjangoUeditor,安装DjangoUeditor,但由于DjangoUeditor没有python3版本的,从的Github上把修改好 ...

  7. phalcon安装-遇坑php-config is not installed 解决方法

    通过源码编译安装php环境,按照phalcon官方文档安装扩展,会遇到php-config is not installed的坑. 尝试通过下列命令可以解决: cd /opt/cphalcon-/bu ...

  8. java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet解决

    spring配置之后启动报错,如下: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServl ...

  9. iOS 网络操作与AFNetworking

    一.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit (印度人写的). 3.AFN一直还在更新. AFNetworking的出 ...

  10. Spring 监听

    Spring 中的事件监听的实现 这里我们不讨论事件监听的机制的原理,我们只讨论如何在项目中实现时间监听. spring的事件监听是基于观察者模式.设计开发中.如下类与接口是我们必须要使用的. App ...