Du könntest das mit XPath lösen.
Mit XPath kann man wie mit einem Filter einen oder mehrere Knoten aus der Gesamtmenge rausholen.
Beispiele für XPath-Ausdrücke:
liefert alle Elemente namens "data", die das Attribut "cname" haben
liefert alle Elemente namens "data", bei denen das Attribut "cname" den Wert 123 hat.
Viele Parser haben XPath-Unterstützung. Die genaue Syntax ist von Parser abhängig.
Delphi-Quellcode:
// Knoten mit XPath selektieren
nodelist := rootelement.SelectNodes('//data[@cname="123"]');
for i := 0 to nodelist.count-1 do // über alle Knoten
begin
node := nodelist.Item[i];
// z.B. wird hier ein neues Attribut gesetzt
(node as IXMLElement).SetAttribute('idx', inttoStr(i));
end;