Cześć.
Chciałem przerobić troszkę swój kod Mam edycję danych xml i wszystko chodzi tylko zamiast podglądu xml w memo chciałem przejść na TreeView
Kod ładowania do TreeView nie ma co się oszukiwać ściągnąłem z netu ale ładuje ładnie dane. Tylko już przy edycji nic się nie zmienia, przeładowuje TreeView ale pozostaje bez zmian a w Memo zmiany są widoczne. Może dlatego że nie pozmieniałem typów z interfejsu XML Data Binding ale na tych Nodach to ja kociokwiku dostaje i nie wie co jest co. Jak by ktoś mógł zerknąć i pomóc będę wdzięczny. A oto cały kod.
XMLIntf: IXMLTransportType;
procedure TForm1.btnLoadXMLClick(Sender: TObject);
var
i:integer;
lCar : IXMLCarType;
begin
if OpenDialog1.Execute() then
begin
XMLDocument1.Active := True;
XMLDocument1.LoadFromFile(OpenDialog1.FileName);
XMLIntf := GetTransport(self.XMLDocument1);
Treeview1.Items.Clear;
DomToTree(XMLIntf, nil);
TreeView1.FullExpand;
for I := 0 to XMLIntf.Cars.Count - 1 do
begin
lCar := XMLIntf.Cars.Car[I];
self.ListBox1.Items.Add(lCar.Type);
end;
end;
end;
procedure TForm1.btnEditClick(Sender: TObject);
var
i:integer;
begin
i:=Listbox1.Itemindex;
ListBox1.Items[ListBox1.ItemIndex] := Edit1.Text;
XMLIntf.Cars.Car[i].Type:= Edit1.Text;
Memo1.Text := self.XMLDocument1.XML.Text;
DomToTree(XMLIntf, nil);
TreeView1.FullExpand;
end;
procedure TForm1.DomToTree (XmlNode: IXMLNode; TreeNode: TTreeNode);
var
I: Integer;
NewTreeNode: TTreeNode;
NodeText: string;
AttrNode: IXMLNode;
begin
if XmlNode.NodeType <> ntElement then
Exit;
NodeText := XmlNode.NodeName;
if XmlNode.IsTextElement then
NodeText := NodeText + ' = ' + XmlNode.NodeValue;
NewTreeNode := TreeView1.Items.AddChild(TreeNode, NodeText);
for I := 0 to xmlNode.AttributeNodes.Count - 1 do
begin
AttrNode := xmlNode.AttributeNodes.Nodes[I];
TreeView1.Items.AddChild(NewTreeNode,
'[' + AttrNode.NodeName + ' = "' + AttrNode.Text + '"]');
end;
if XmlNode.HasChildNodes then
for I := 0 to xmlNode.ChildNodes.Count - 1 do
DomToTree (xmlNode.ChildNodes.Nodes [I], NewTreeNode);
end;