CreateNode的用法,急

prolazy 2006-05-11 01:13:53
生成XML用的,用的是txmldocument组件,定义的节点是ixmlnode
本来的用的addchild()语句,但是有参数错误
delphi的帮助里面有:
AddChild only adds element nodes. To add other types of child nodes, use the XML document CreateNode method instead, and then add the resulting node to the ChildNodes property array.
我想用createnode来代替

result := query.fieldbyname('data1').asstring;
后的 语句
dNode:=cNode.AddChild(result);
应该怎磨做?
...全文
157 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
postren 2006-05-11
  • 打赏
  • 举报
回复
unit UXMLDocument;

interface

uses
XMLIntf, XMLDoc;

type
TMyXMLDocument = class(TXMLDocument)
public
function GetNodeValue(NodeName: array of WideString;
const DefValue: OleVariant): OleVariant;
procedure SetNodeValue(NodeName: array of WideString;
const Value: OleVariant);
end;

implementation

{ TMyXMLDocument }

function TMyXMLDocument.GetNodeValue(NodeName: array of WideString;
const DefValue: OleVariant): OleVariant;
//==============================================================================
// Function: 获得节点值,如果节点不存在,则返回默认值DefValue
//Parameters: NodeName表示多级节点名称,DefValue表示如果节点不存在的返回值
// Result: 节点内容
//==============================================================================
var
I: Integer;
Root: IXMLNode;
begin
Result := DefValue;
if DocumentElement = nil then Exit;
Root := DocumentElement;
for I := 0 to Length(NodeName) -1 do
begin
if Root = nil then Break;
Root := Root.ChildNodes.FindNode(NodeName[I]);
end;
if Root <> nil then
Result := Root.NodeValue;
end;

procedure TMyXMLDocument.SetNodeValue(NodeName: array of WideString;
const Value: OleVariant);
//==============================================================================
// Function: 设置节点内容,如果节点不存在,则创建节点;如果根节点不存在,则不进
// 行任何操作
//Parameters: NodeName表示多级节点名称,Value表示节点值
//==============================================================================
var
I: Integer;
Root, Root2: IXMLNode;
begin
if DocumentElement = nil then Exit;
Root := DocumentElement;
for I := 0 to Length(NodeName) -1 do
begin
Root2 := Root.ChildNodes.FindNode(NodeName[I]);
if Root2 = nil then
Root2 := Root.AddChild(NodeName[I]);
Root := Root2;
end;
Root.NodeValue := Value;
end;

end.

下面是一个例子,该例子保存窗体的位置
-------------------
const
SettingFileName = 'setting.xml';

procedure TfrmMain.FormCreate(Sender: TObject);
var
XML: TMyXMLDocument;
begin
XML := TMyXMLDocument.Create(Application);
XML.Options := [doNodeAutoCreate,doNodeAutoIndent,doAttrNull,doAutoPrefix,doNamespaceDecl];
try
if FileExists(SettingFileName) then
XML.LoadFromFile(SettingFileName)
else
begin
XML.Active := True;
XML.Create(SettingFileName);
XML.AddChild('Setting', '1.0');
XML.SaveToFile(SettingFileName);
end;
Width := XML.GetNodeValue([Name, 'Width'], Width);
Height := XML.GetNodeValue([Name, 'Height'], Height);
Top := XML.GetNodeValue([Name, 'Top'], Top);
Left := XML.GetNodeValue([Name, 'Left'], Left);
finally
XML.Free;
end;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
var
XML: TMyXMLDocument;
begin
XML := TMyXMLDocument.Create(Application);
XML.Options := [doNodeAutoCreate,doNodeAutoIndent,doAttrNull,doAutoPrefix,doNamespaceDecl];
try
if FileExists(SettingFileName) then
XML.LoadFromFile(SettingFileName)
else
begin
XML.Active := True;
XML.Create(SettingFileName);
XML.AddChild('Setting', '1.0');
end;
XML.SetNodeValue([Name, 'Width'], Width);
XML.SetNodeValue([Name, 'Height'], Height);
XML.SetNodeValue([Name, 'Top'], Top);
XML.SetNodeValue([Name, 'Left'], Left);
XML.SaveToFile(SettingFileName);
finally
XML.Free;
end;
end;

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧