Hallo zusammen,
ich lese die Name-Eigenschaft mehrerer
XML-Nodes in eine ListView ein.
Wenn ich eine dieser Nodes dann in der ListView anklicke, so suche ich in der
XML-Datei die entsprechende Node über den Namen und zeige die Details der Node in einem ValueListEditor. Das hat auch wunderbar funktioniert.
Bis ich gemerkt habe, dass der Urheber der
XML-Datei keinen großen Wert auf Eindeutigkeit gelegt hat, so dass es mehrere Nodes mit dem gleichen Namen gibt, und die zu allem Überfluß auch noch diie selbe Parent-Node haben...
Damit fällt also die Identifizierung über den Namen weg. Nun dachte ich mir, identifiziere ich die Node doch einfach über Ihre Text-Eigenschaft. Dazu speichere ich beim Anlegen der Items in der ListView die Details der Node in der Data-Eigenschaft des Items.
Wenn ich nun ein Item anklicke, dann suche ich in der
XML-Datei nach der Node, mit dem entsprechenden Text.
Delphi-Quellcode:
procedure TfrmMain.lvDetailsSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
var
nlFileDetails: IXMLDOMNodeList;
nChild: IXMLDOMNode;
i: Integer;
xPath: string;
Data: PListItemData;
begin
if Selected then begin
ChangeCursor;
ClearValueList(vle1);
Data := Item.Data;
xPath := '//Folder[name="' + GetNodeData + '"]/Datei[text="' + Data.Details + '"]/*';
nlFileDetails := xmlDoc.documentElement.selectNodes(xPath);
for i := 0 to nlFileDetails.length - 1 do begin
nChild := nlFileDetails.Item[i];
vle1.InsertRow(nChild.nodeName, nChild.text, True);
end;
ChangeCursor;
end;
end;
Das dumme ist nur, das nlFileDetails.length nach der Abfrage 0 ist, obwohl die Node mit der Text-Eigenschaft ja definitiv existiert.
Was habe ich übersehen?