📄 unit1.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 + -