delphi 很早之前就自帶了xml 的操做,最新版裏面有三種XML 解釋器,一種是MSXML,看名字就知道html
這個是微軟自帶的,這個據delphi 官方稱是速度是最快的,可是隻能在windows 上使用。另外兩個是node
OmniXML, ADOM, 這兩個都是跨平臺的。可是速度比MSXML 慢點。在delphi 10.2 裏面,WINDOWS
linux
應用默認使用MSXML, linux 應用默認使用OmniXML。 固然也能夠經過強行改變windows
今天咱們講一下如何使用kbmmw 內置的XML 解釋器處理XML . 爲何要使用kbmmw 的XML 解釋器呢,dom
主要緣由是跨平臺,同時做者號稱其速度很快(我沒有作具體的比較),最重要的是它能夠與JSON,YAML,BSONgoogle
直接互相轉換。spa
首先,在kbmmw 的XML 裏面,主要有兩個對象,一個是TkbmMWDOMXML,他表明着整個XML 對象,另外code
一個就是TkbmMWDOMXMLNode,它表明XML 中的節點。orm
咱們建一個最簡單的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