Nein, bitte keine 120 Zeilen Code posten.
Ich zeig mal meinen Code. Ausgehend von der Beispieldatei:
Code:
<test>
<main1>
<sub1.1/>
<sub1.2>
<sub1.2.1/>
<sub1.2.2/>
</sub1.2>
<sub1.3/>
</main1>
<main2/>
<main3>
<sub3.1/>
<sub3.2/>
<sub3.3>
<sub3.3.1/>
<sub3.3.2>
<sub3.3.2.1/>
</sub3.3.2>
</sub3.3>
</main3>
</test>
komme ich mit dem
XML-Parser 4 von Microsoft auf die paar Zeilen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
procedure Fill(const XMLNode: IXMLDOMNode;
tvParent: TTreeNode);
var
i : integer;
tv : TTreeNode;
begin
if(XMLNode <> nil) then begin
if(tvParent = nil) then
tv := xmltv.Items.Add(nil,XMLNode.Get_nodeName)
else
tv := xmltv.Items.AddChild(tvParent,XMLNode.Get_nodeName);
if(XMLNode.childNodes.length > 0) then
for i := 0 to XMLNode.childNodes.length - 1 do
Fill(XMLNode.childNodes[i],tv);
end;
end;
var
xmldoc : DomDocument40;
begin
xmldoc := CoDOMDocument40.Create;
if(xmldoc <> nil) then try
xmldoc.async := false;
xmldoc.resolveExternals := false;
if(xmldoc.load(ExtractFilePath(paramstr(0)) +
'test.xml')) then
begin
xmltv.Items.BeginUpdate;
Fill(xmldoc.documentElement,nil);
xmltv.Items.EndUpdate;
if(xmltv.Items.Count > 0) then
xmltv.Items.Item[0].Expand(true);
end;
finally
xmldoc := nil;
end;
end;
Es sind weniger als 120 Zeilen.
Allerdings muss man doch wohl einschränken, dass es vom Programm abhängt. In meinem Beispiel interessieren mich der Inhalt der Knoten und irgendwelche Attribute überhaupt nicht. Ich lese einfach nur alle Knoten aus und lasse sie in den Tree-View eintragen.
Wenn du, @Muetzi, noch Wert auf irgendwelche speziellen Dinge legst, dann wird dein Code naturgemäß auch umfangreicher.