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. yaml文件 *.yml 写法简介

    YAML(Yet Another Markup Language)(发音 /ˈjæməl/ ) 一种基于Unicode容易阅读,容易和脚本语言交互的,用来表达资料序列的编程语言. 适应场景 脚本语言: ...

  2. Android 实现简单 倒计时60秒,一次1秒

    倒计时功能如上图所示,其实就几行代码即可实现效果啦!!! /** 倒计时60秒,一次1秒 */ CountDownTimer timer = new CountDownTimer(60*1000, 1 ...

  3. 896. Monotonic Array单调数组

    [抄题]: An array is monotonic if it is either monotone increasing or monotone decreasing. An array A i ...

  4. width多少,超过了用....表示

    maxWidth:'140px',whiteSpace:'nowrap',overflow:'hidden',textOverflow:'ellipsis'

  5. IOS开发之无法选择模拟器显示NO Scheme

    1. 不是 文件冲突的 看这个链接https://blog.csdn.net/sanpintian/article/details/7377365 2.文件冲突的  打开工程文件. 打开 直接 搜索 ...

  6. Swift 常量、变量、条件判断

    - 常量用 let ,变量用 var - // Optional为可选项,// 可用类型值 + ? 代替 let x: Optional = 10 let y: Int? = 5 print(x! + ...

  7. 以太坊难度炸弹是什么?极大抑制矿工继续以POW方式挖矿!

    以太坊的“难度炸弹”(“Difficulty Bomb”)指的是,在挖掘算法中,使用以太币在区块链上对矿工进行奖励的难度越来越大.随着游戏变得更加复杂(矿工发现以太币难挣得多),在以太坊区块链上块的生 ...

  8. Git两分钟指南-学习入门参考

    Git两分钟指南 http://blog.jobbole.com/78999/ GIT和SVN之间的五个基本区别 http://www.oschina.net/news/12542/git-and-s ...

  9. istio分布式调用链Jaeger

    1.安装 kubectl apply -n istio-system -f https://raw.githubusercontent.com/jaegertracing/jaeger-kuberne ...

  10. nginx 启动报错 “/var/run/nginx/nginx.pid" failed” 解决方法

    问题: 重启虚拟机后,再次重启nginx会报错: open() "/var/run/nginx/nginx.pid" failed (2: No such file or dire ...