分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

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

发布时间:2023-09-06 01:11责任编辑:苏小强关键词:暂无标签

      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-8" 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-8" 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 := 1 to 10 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-8" standalone="no" ?><creator>xalion</creator><result><row><id xsd:type="int">1</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</date></row><row><id xsd:type="int">2</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</date></row><row><id xsd:type="int">3</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</date></row><row><id xsd:type="int">4</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</date></row><row><id xsd:type="int">5</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</date></row><row><id xsd:type="int">6</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</date></row><row><id xsd:type="int">7</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</date></row><row><id xsd:type="int">8</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</date></row><row><id xsd:type="int">9</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</date></row><row><id xsd:type="int">10</id><name>xalion</name><date xsd:type="datetime">2017-07-24T01:37:51.761+08:00</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>0 then ???????begin ????????for i := 0 to datanode.Nodes.Count-1 do ???????????begin ????????????rownode:=datanode.Nodes[i]; ???????????????for j := 0 to rownode.Nodes.Count-1 do ?????????????????begin ??????????????????node:=rownode.Nodes[j]; ??????????????????if node<>nil then ?????????????????????memo2.Lines.Add(node.Data); ?????????????????end; ???????????end; ???????end; ???end; ??finally ????dom.Free ??end;end;

运行结果如图:

基本上就是这样了。

http://www.cnblogs.com/xalion/p/7225682.html

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

原文地址:http://www.cnblogs.com/findumars/p/7518733.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved