Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在TTreeview Items数据属性中存储和检索IXMLNodes_Xml_Delphi - Fatal编程技术网

在TTreeview Items数据属性中存储和检索IXMLNodes

在TTreeview Items数据属性中存储和检索IXMLNodes,xml,delphi,Xml,Delphi,不确定这是否可行。我使用的是Delphi XE-5。我想 是否在树视图的Items数据属性中存储XML节点 Node:= tvwItems.Items.AddObject(nil, RootNode.ChildNodes[I].ChildNodes[0].AttributeNodes[1].Text, RootNode.ChildNodes[I]) 这给了我以下的错误 [dcc32错误]LtLiveApplication_Main.pas(88):E2010不兼容 类型:“指针”和“IXMLN

不确定这是否可行。我使用的是Delphi XE-5。我想 是否在树视图的Items数据属性中存储XML节点

Node:= tvwItems.Items.AddObject(nil, RootNode.ChildNodes[I].ChildNodes[0].AttributeNodes[1].Text, RootNode.ChildNodes[I])
这给了我以下的错误

[dcc32错误]LtLiveApplication_Main.pas(88):E2010不兼容 类型:“指针”和“IXMLNode”

所以,如果不能做到这一点,也许我可以将子节点的整数值转换为TObject

Node:= tvwItems.Items.AddObject(nil, RootNode.ChildNodes[I].ChildNodes[0].AttributeNodes[1].Text,TObject(I));
然后在TreeView OnClick事件中,我希望存储节点,并使用它获取另一个节点

无论如何,一旦我弄清楚应该如何正确地存储它(IXMLNode或Integer),我也需要正确地检索它


谢谢

IXMLNode
是一个参考计数接口。您必须键入cast it,才能将其放入
数据
属性中,并且还必须在
TTreeNode
处于活动状态时手动增加接口的引用计数,并在
TTreeNode
被销毁之前将其减少:

var
  XmlNode: IXMLNode:
  Node: TTreeNode;
begin
  ...
  XmlNode := RootNode.ChildNodes[I];
  Node := tvwItems.Items.AddObject(nil, XmlNode.ChildNodes[0].AttributeNodes[1].Text, TCustomData(XmlNode));
  XmlNode._AddRef;
  ...
end;

procedure TMyForm.tvwItemsDeletion(Sender: TObject; Node: TTreeNode);
var
  XmlNode: IXMLNode;
begin
  XmlNode := IXMLNode(Node.Data);
  XmlNode._Release;
end;

procedure TMyForm.tvwItemsClick(Sender: TObject);
var
  Node: TTreeNode;
  XmlNode: IXMLNode;
begin
  Node := tvwItems.Selected;
  if Node <> nil then
  begin
    XmlNode := IXMLNode(Node.Data);
    ...
  end;
end;

var
XmlNode:IXMLNode:
节点:TTreeNode;
开始
...
XmlNode:=RootNode.ChildNodes[I];
节点:=tvwItems.Items.Add(nil,XmlNode.ChildNodes[0].AttributeNodes[1].Text);
TMyTreeNode(Node).XmlNode:=XmlNode;
...
结束;
程序TMyForm.tvwItemsClick(发送方:ToObject);
变量
节点:TTreeNode;
XmlNode:IXMLNode;
开始
节点:=tvwItems,选中;
如果节点为nil,则
开始
XmlNode:=TMyTreeNode(Node).XmlNode;
...
结束;
结束;

IXMLNode
是一个引用计数接口。您必须键入cast it,才能将其放入
数据
属性中,并且还必须在
TTreeNode
处于活动状态时手动增加接口的引用计数,并在
TTreeNode
被销毁之前将其减少:

var
  XmlNode: IXMLNode:
  Node: TTreeNode;
begin
  ...
  XmlNode := RootNode.ChildNodes[I];
  Node := tvwItems.Items.AddObject(nil, XmlNode.ChildNodes[0].AttributeNodes[1].Text, TCustomData(XmlNode));
  XmlNode._AddRef;
  ...
end;

procedure TMyForm.tvwItemsDeletion(Sender: TObject; Node: TTreeNode);
var
  XmlNode: IXMLNode;
begin
  XmlNode := IXMLNode(Node.Data);
  XmlNode._Release;
end;

procedure TMyForm.tvwItemsClick(Sender: TObject);
var
  Node: TTreeNode;
  XmlNode: IXMLNode;
begin
  Node := tvwItems.Selected;
  if Node <> nil then
  begin
    XmlNode := IXMLNode(Node.Data);
    ...
  end;
end;

var
XmlNode:IXMLNode:
节点:TTreeNode;
开始
...
XmlNode:=RootNode.ChildNodes[I];
节点:=tvwItems.Items.Add(nil,XmlNode.ChildNodes[0].AttributeNodes[1].Text);
TMyTreeNode(Node).XmlNode:=XmlNode;
...
结束;
程序TMyForm.tvwItemsClick(发送方:ToObject);
变量
节点:TTreeNode;
XmlNode:IXMLNode;
开始
节点:=tvwItems,选中;
如果节点为nil,则
开始
XmlNode:=TMyTreeNode(Node).XmlNode;
...
结束;
结束;

a一些答案!非常感谢你!真是个好答案!非常感谢你!
var
  XmlNode: IXMLNode:
  Node: TTreeNode;
begin
  ...
  XmlNode := RootNode.ChildNodes[I];
  Node := tvwItems.Items.Add(nil, XmlNode.ChildNodes[0].AttributeNodes[1].Text);
  TMyTreeNode(Node).XmlNode := XmlNode;
  ...
end;

procedure TMyForm.tvwItemsClick(Sender: TObject);
var
  Node: TTreeNode;
  XmlNode: IXMLNode;
begin
  Node := tvwItems.Selected;
  if Node <> nil then
  begin
    XmlNode := TMyTreeNode(Node).XmlNode;
    ...
  end;
end;