Einzelnen Beitrag anzeigen

s-off
(Gast)

n/a Beiträge
 
#1

XML: Node über Text-Attribut identifizieren

  Alt 20. Mai 2006, 20:13
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?
  Mit Zitat antworten Zitat