Hallo!
Ich möchte gerne
XML für Konfigurationsdateien verwenden und nun versuche ich schon seit einigen Tagen (bis jetzt leider ziemlich erfolglos
) eine
XML-Datei in einen TreeView einzulesen. Dabei verwende ich folgenden Code:
Delphi-Quellcode:
var
benutzer, anwendung : IXMLDOMNodeList;
Node, subNode : IXMLDOMNode;
i, j: integer;
tv : TTreeNode;
begin
xmldoc := CoDOMDocument40.Create;
xmldoc.setProperty('NewParser', true);
xmldoc.load(ExtractFilePath(ParamStr(0)) + 'test.xml');
TreeView.Items.BeginUpdate;
TreeView.Items.Clear;
benutzer := xmldoc.documentElement.selectNodes('benutzer');
anwendung := xmldoc.documentElement.selectNodes('benutzer/anwendung');
for i:= 0 to benutzer.length - 1 do
begin
Node := benutzer.item[i].selectSingleNode('benutzername');
tv := TreeView.Items.Add(nil, Node.text);
for j:= 0 to anwendung.length - 1 do
begin
subNode := anwendung.item[j].selectSingleNode('anwendungsname');
TreeView.Items.AddChild(tv, subNode.text);
end;
end;
TreeView.Items.EndUpdate;
end;
Dies ist die einzulesende
XML-Datei (kleiner Auszug):
Code:
<?
xml version="1.0"?>
<programmname>
<benutzer>
<benutzername>ABCD</benutzername>
<passwort>123456</passwort>
<domain>Testdomain</domain>
<anwendung>
<anwendungsname>Anwendung 1</anwendungsname>
<pfad>datei.exe</pfad>
<parameter></parameter>
</anwendung>
<anwendung>
<anwendungsname>Anwendung 2</anwendungsname>
<pfad>datei.exe</pfad>
<parameter></parameter>
</anwendung>
</benutzer>
<benutzer>
<benutzername>EFGH</benutzername>
<passwort>654321</passwort>
<domain>Blabla</domain>
<anwendung>
<anwendungsname>Anwendung 1</anwendungsname>
<pfad>datei.exe</pfad>
<parameter></parameter>
</anwendung>
</benutzer>
</programmname>
Was problemlos klappt ist das Einlesen der Benutzernamen. Prinzipell klappt auch das Einlesen des Namens der Anwendung. Nur wird hier leider der Fehler gemacht das jede eingetragende Anwendung jedem Benutzer im Treeview zugeordnet wird. Wie man an der
XML-Datei sieht (bzw. sehen sollte falls ich hier keinen Fehler gemacht habe) sollte das aber nicht so sein. Hat einer von euch vielleicht eine Idee was ich hier falsch mache?
P.S.: Habe auch schon hier im Forum gesucht aber noch keine wirkliche Lösung für mein Problem gefunden.