⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 XML 精要 范例 解析封装类库
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls, Grids, XMLParse, test,
  IdCoder, IdCoder3to4, IdCoderMIME, IdBaseComponent;
const  INVAILDATED_TEXT       = '无效的节点或者该节点不能包括单独的Text';
       INVAILDATED_ATTRIBUTE  = '无效的节点或者属性';
       INVALIDATED_PARENTNODE = '无效的父节点';
type
  TForm1 = class(TForm)
    sgdData: TStringGrid;
    XMLDocument1: TXMLDocument;
    Memo1: TMemo;
    Button3: TButton;
    Button5: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    labAction: TLabel;
    GroupBox1: TGroupBox;
    Label5: TLabel;
    labIP: TLabel;
    Label7: TLabel;
    labHandler: TLabel;
    Label9: TLabel;
    labUnit: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  XML : TXMLDOMEx;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  XML := TXMLDOMEx.Create('test.xml');

  // 初始化sgdData
  sgdData.Cells[0, 0] := 'name' ;
  sgdData.Cells[1, 0] := 'sex' ;
  sgdData.Cells[2, 0] := 'age' ;
  sgdData.Cells[3, 0] := 'duty' ;
  // End .
end;


procedure TForm1.Button3Click(Sender: TObject);
var xml :IXMLXMLPackageType;
begin
   xml := LoadXMLPackage( 'test.xml' );    

   memo1.Lines.Add(xml.Data.Row[1].name);     // 嘿嘿, 简单吧

end;


procedure TForm1.Button5Click(Sender: TObject);
var strTemp      :String;   // 临时变量
    strNodePath  :String;   // 访问的节点路径
    i, j, iCount :Integer;  // 计数变量, 记录数.
    XMLNode      :IXMLNode; // XML节点
begin
  // 开始解析节点(元素) clientinfo
  strNodePath := 'XMLPackage.clientinfo';
  if not xml.GetNodeAttribute( strNodePath, 'ip', strTemp ) then
    labIP.Caption:= INVAILDATED_ATTRIBUTE
  else
    labIP.Caption := strTemp;

  if not xml.GetNodeAttribute( strNodePath, 'handler', strTemp ) then
    labHandler.Caption := INVAILDATED_ATTRIBUTE
  else
    labHandler.Caption := strTemp;

  if not xml.GetNodeAttribute( strNodePath, 'unit', strTemp ) then
    labUnit.Caption := INVAILDATED_ATTRIBUTE
  else
    labUnit.Caption := strTemp;
  // End .

  // 开始解析 data
   strNodePath := 'XMLPackage.data';
   iCount := xml.GetChridNodeCount( strNodePath, 'row' );

   // 逐条读取data中的row元素
   strNodePath := 'XMLPackage.data.row';
   i := 0;
   sgdData.RowCount := iCount + 1;
   while  i < iCount do
   begin
     xml.GetNodeAttribute( strNodePath, 'name', strTemp, i );
     sgdData.Cells[0, i + 1] := strTemp;

     xml.GetNodeAttribute( strNodePath, 'sex', strTemp, i );
     sgdData.Cells[1, i + 1] := strTemp;

     xml.GetNodeAttribute( strNodePath, 'age', strTemp, i );
     sgdData.Cells[2, i + 1] := strTemp;

     xml.GetNodeAttribute( strNodePath, 'duty', strTemp, i );
     sgdData.Cells[3, i + 1] := strTemp;

     inc( i );
    end;
   // End . 这里应为要读的属性不是太多, 如果多的话,可以考虑先在数组中存好要读取的属性, 通过for循环来做.
  // End .

  // 解析memo
   strNodePath := 'XMLPackage.memo';
   if xml.GetNodeAttribute( strNodePath, 'color', strTemp ) then
    memo1.Color := TColor( strTemp );

   if not xml.GetNodeText( strNodePath, strTemp ) then
     memo1.Lines.Add( INVAILDATED_TEXT )
   else
     memo1.Lines.Add( strTemp );
  // End .

  // 解析actions
   strNodePath := 'XMLPackage.actions';
   if not xml.GetNodeAttribute( strNodePath, 'action', strTemp ) then
     labAction.Caption := INVAILDATED_ATTRIBUTE
   else
     labAction.Caption := strTemp;
  // End .


end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -