我现在要做的事是在TreeView里面选中一个节点进行新建,这个是成功的,但是要同时XML文件里的对应的那个节点下也新建一个节点,貌似没有成功啊,每次都是在XML的根节点下新建了一个节点,经过调试后我发现树的所选节点没有传递到我定义的FindNodePath函数里面去,后面的当然也没法有数据了,先附一下我的代码吧,不长,但看着可能有点费力,但问题应该不是在我的函数里面//==============================================================================
// 新建节点
//==============================================================================
procedure TForm1.newBtnClick(Sender: TObject);
var
rNode,tmpNode,newNode: IXMLNode;
nowTreeNode: TTreeNode ;
nowNodePath: TStringList;
cNode,pNode,nNode:TTreeNode ;
i:Integer;
xmlToTree:TXmlToTree;
newname:string;
flag : Boolean;
begin
newname := InputBox('提示','请输入文件名:','newname');
flag := True ;
if TreeView1.Selected.HasChildren then
begin
cNode := TreeView1.Selected.getFirstChild;
for i:=1 to TreeView1.Selected.Count-1 do
begin
cNode := cNode.getNextSibling;
if cNode.Text = newname then
begin
ShowMessage('已经有一个此名字的文件!');
flag := False ;
Break;
end;
end;
end;
if flag then
TreeView1.Items.AddChild(TreeView1.Selected , newname); xmlToTree:= TXmlToTree.Create ;
nowTreeNode:= TreeView1.Selected;//此句执行后nowTreeNode为什么是空的? nowNodePath := xmlToTree.findNodePath(nowTreeNode);
rNode := XMLDocument1.DocumentElement;
tmpNode := xmlToTree.findNode(nowNodePath,rNode);
newNode := tmpNode.AddChild('DIR');
newNode.Attributes['Label'] := newname; XMLDocument1.SaveToFile('e:\xiaowei\mytest.xml');
end;
// 新建节点
//==============================================================================
procedure TForm1.newBtnClick(Sender: TObject);
var
rNode,tmpNode,newNode: IXMLNode;
nowTreeNode: TTreeNode ;
nowNodePath: TStringList;
cNode,pNode,nNode:TTreeNode ;
i:Integer;
xmlToTree:TXmlToTree;
newname:string;
flag : Boolean;
begin
newname := InputBox('提示','请输入文件名:','newname');
flag := True ;
if TreeView1.Selected.HasChildren then
begin
cNode := TreeView1.Selected.getFirstChild;
for i:=1 to TreeView1.Selected.Count-1 do
begin
cNode := cNode.getNextSibling;
if cNode.Text = newname then
begin
ShowMessage('已经有一个此名字的文件!');
flag := False ;
Break;
end;
end;
end;
if flag then
TreeView1.Items.AddChild(TreeView1.Selected , newname); xmlToTree:= TXmlToTree.Create ;
nowTreeNode:= TreeView1.Selected;//此句执行后nowTreeNode为什么是空的? nowNodePath := xmlToTree.findNodePath(nowTreeNode);
rNode := XMLDocument1.DocumentElement;
tmpNode := xmlToTree.findNode(nowNodePath,rNode);
newNode := tmpNode.AddChild('DIR');
newNode.Attributes['Label'] := newname; XMLDocument1.SaveToFile('e:\xiaowei\mytest.xml');
end;
解决方案 »
- 关于图像截取问题image1上的图像如何取得左边部分呢?在线等
- 两个ado查询.AdoQuery1查询出来的数据,如果把这个ADO的记录加入另一个ADO。
- 求条码DELPHI控件:Barcode studio
- ok,搞定视频叠加,散分,顺便求段代码~
- 找一个虚拟光驱(具有从硬盘文件生成压缩映像文件功能)
- 关于登陆窗口的问题
- 怎么样在DBGrid里删除一条记录??
- 程序打包后,安装到其他客户机都可连接上数据库,唯独一台笔记本连不上???
- delphi-5-2
- 请教高手:Actionlist,TActionManager 的用法。。。
- 一个idhttp获取的问题,,各位,谢谢啦,
- 崩溃了.delphi2010的JSONObject传入需要AnsiString.它自己返回却是UnicodeString
//这个函数是利用树中选定节点路径来寻找XML中的节点
function TXmlToTree.findNode(nodePath:TStringList;rNode:IXMLNode): IXMLNode;
var
i,j:Integer;
begin
for I := nodePath.Count-1 downto 0 do
begin
if rNode.HasChildNodes then
begin
for j := 0 to rNode.ChildNodes.Count-1 do
begin
if ((rNode.ChildNodes[j].Attributes['Label'] = nodePath[i]) and
(rNode.ChildNodes[j].HasChildNodes) and (i <> 0)) then
rNode := rNode.ChildNodes[j];
end;
end;
end;
Result := rNode;
end;//这个函数是通过点击树节点获取所选节点的路径
function TXmlToTree.findNodePath(nowTreeNode: TTreeNode): TStringList;
var
i:Integer;
nowNodePath: TStringList;
begin
nowNodePath := TStringList.Create ;
nowNodePath.Add(nowTreeNode.Text) ;
for i := 0 to nowTreeNode.Index do
begin
nowNodePath.Add(nowTreeNode.Text);
if i<>nowTreeNode.Index then
nowTreeNode := nowTreeNode.Parent;
end;
Result := nowNodePath;
end;