Delphi 7处理XML文件

1、前言

本文主要介绍delphi的TXMLDocument组件来读取XML文件。TXMLDocument组件位置如下图:
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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值