procedure TForm1.XML2Tree(tree: TTreeView; XMLDoc: TXMLDocument);
var
iNode: TDOMNode;
procedure ProcessNode(Node: TDOMNode; TreeNode: TTreeNode);
var
cNode: TDOMNode;
begin
if Node = nil then Exit; // Aufhören, wenn ein Blatt erreicht ist
// Einen Knoten zum Baum hinzufügen
TreeNode := tree.Items.AddChild(TreeNode, Node.Attributes[0].NodeValue); <---- Hier tritt der Fehler auf
// Zum Kindknoten weiter gehen
cNode := Node.ChildNodes.Item[0];
// Alle Kindknoten bearbeiten
while cNode <> nil do
begin
ProcessNoDe(cNode, TreeNode);
cNode := cNode.NextSibling;
end;
end;
begin
iNode := XMLDoc.DocumentElement.ChildNodes.Item[0];
while iNode <> nil do
begin
ProcessNode(iNode, nil); // Rekursiv
iNode := iNode.NextSibling;
end;
end;
tritt an der markierten Stelle (Knoten zum Baum hinzufügen) die Fehlermeldung:
procedure ProcessNode(Node: TDOMNode; TreeNode: TTreeNode);
var
cNode: TDOMNode;
s: string;
begin
if Node = nil then Exit; // Stops if reached a leaf
// Adds a node to the tree
if Node.HasAttributes and (Node.Attributes.Length>0) then //diese if-then-else Verzweigung ist neu
s := Node.Attributes[0].NodeValue
else
s := '';
TreeNode := tree.Items.AddChild(TreeNode, s);