博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kbmmw 中XML 操作入门
阅读量:6802 次
发布时间:2019-06-26

本文共 5859 字,大约阅读时间需要 19 分钟。

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

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

, 这两个都是跨平台的。但是速度比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;

运行结果如下:

我们可以继续加入一个节点。

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;

运行结果如下:

xalion

继续插入一组数据

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;

输出结果如下:

xalion
1
xalion
2017-07-24T01:37:51.761+08:00
2
xalion
2017-07-24T01:37:51.761+08:00
3
xalion
2017-07-24T01:37:51.761+08:00
4
xalion
2017-07-24T01:37:51.761+08:00
5
xalion
2017-07-24T01:37:51.761+08:00
6
xalion
2017-07-24T01:37:51.761+08:00
7
xalion
2017-07-24T01:37:51.761+08:00
8
xalion
2017-07-24T01:37:51.761+08:00
9
xalion
2017-07-24T01:37:51.761+08:00
10
xalion
2017-07-24T01:37:51.761+08:00

上面介绍了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://dzfwl.baihongyu.com/

你可能感兴趣的文章
国美在线“8.3男人节”来了 3C家电百货五折扫货就在今天
查看>>
IBM推出开源软件开发工具Quarks,助力企业开发物联网应用
查看>>
《高阶Perl》——第1章 递归与回调 1.1 十进制到二进制的转换
查看>>
关于网联平台的出世,有必要解释清楚这几个问题
查看>>
国家工业信息安全产业发展联盟成立
查看>>
雅虎修改公司章程 防止激进投资者进驻董事会
查看>>
卫翰思治下的爱立信:被华为全面超越 近一年股价跌40%
查看>>
超融合设备如何影响私有云部署
查看>>
鳄鱼还是木头?亚信安全提醒:APT攻击防范要当心“水坑”
查看>>
互联健康 共融共生
查看>>
传郭台铭已与夏普高层会晤 商讨收购事宜
查看>>
政府单位专享 国内“特供版”Windows 10真的来了
查看>>
中国百毫秒量子存储器 《自然》:非凡绝技
查看>>
小鱼易连打造基于互联网环境下的高清视频会议终端
查看>>
微型传感器探测屁的来源:可为医疗提供依据
查看>>
历史性时刻!亚马逊股价突破1000美元
查看>>
互联网如何打造智慧医疗:边界确定价值
查看>>
LinkedIn高管告诫年轻人:设定好目标 不要急于求成
查看>>
科林环保子公司签下6.3亿光伏合作协议
查看>>
黑客入侵凯特王妃妹妹账号盗数千照片 欲卖给媒体
查看>>