1、前言
本文主要介绍delphi的TXMLDocument组件来读取XML文件。TXMLDocument组件位置如下图:
2、TXMLDocument组件常用属性说明
NodeName:节点的名称,对于元素节点,这是元素的标签名。
NodeValue:节点的值,对于元素节点,这通常是节点的文本内容;对于属性节点,这是属性的值。
ChildNodes:返回一个IXMLNodeList对象,表示当前节点的所有子节点。
DocumentElement:表示XML文档的根节点。
Attributes:对于元素节点,此属性返回一个包含所有属性的IXMLNode对象的列表。
XML: 返回整个节点原始内容。
3、TXMLDocument组件的使用
3.1 目标xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<rciLogger:RCILogger xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:rciLogger="http:///rciLogger.ecore" cdkVersion="38.0">
<transfer>
<predelay>0</predelay>
<MOSI bytes="0x05,0x06,0x01,0x06,0x00,0x8c"/>
<MISO bytes=""/>
<description>OS_SET_MODE</description>
<postdelay>0</postdelay>
<isselected>true</isselected>
</transfer>
</rciLogger:RCILogger>
3.2 xml与属性对应关系
选出两个有代表性的节点:
1、‘<predelay>0</predelay>
’
NodeName:‘predelay’;
NodeValue:‘0’;
XML:‘<predelay>0</predelay>
’;
2、‘<MOSI bytes="0x05,0x06,0x01,0x06,0x00,0x8c"/>
’
NodeName:‘MOSI ’;
Attributes:‘0x05,0x06,0x01,0x06,0x00,0x8c’;
XML:‘<MOSI bytes="0x05,0x06,0x01,0x06,0x00,0x8c"/>
’;
其中‘bytes’为Attributes的索引标识符。
3.3 对xml文件处理过程
uses
XMLIntf, XMLDoc;
procedure XML_Process(const FileName: string);
var
XMLDoc: IXMLDocument;
RootNode, CurrentNode, CurrentNode_Next: IXMLNode;
i,j: Integer;
begin
XMLDoc := TXMLDocument.Create(nil);
try
XMLDoc.LoadFromFile(FileName);
XMLDoc.Active := True;
RootNode := XMLDoc.DocumentElement;
if Assigned(RootNode) then
begin
// 遍历根节点下的所有子节点
for Ii:= 0 to RootNode.ChildNodes.Count - 1 do
begin
CurrentNode := RootNode.ChildNodes[i];
// 遍历当前节点下的所有子节点
for j := 0 to CurrentNode.ChildNodes.Count - 1 do
begin
CurrentNode_Next := CurrentNode.ChildNodes[j];
Form1.Memo_read.Lines.add(CurrentNode_Next.XML); //获取整个节点文本
Form1.Memo_read.Lines.add(CurrentNode_Next.NodeName); //获取节点名字
if (CurrentNode_Next.NodeName = 'MOSI') then //MOSI节点里包含的是属性,跟其他节点有所差异
begin
Form1.Memo_read.Lines.add( CurrentNode_Next.Attributes['bytes']); //获取节点属性值
end else if (CurrentNode_Next.NodeName <> 'MISO') then
begin
Form1.Memo_read.Lines.add(CurrentNode_Next.NodeValue); //获取节点值
end;
end;
end;
end;
finally
XMLDoc := nil; // 释放XML文档
end;
end;