Man kann auch schon mit billigen Pfaden (ohne XPath) und mit Variablen so Einiges "wegoptimieren".
Delphi-Quellcode:
XML_EV_Players.ChildNodes[1].ChildNodes.Nodes[Idx].ChildNodes['Rounds'].ChildNodes['Round1'].ChildNodes[i].ChildNodes['Shots']
// Der Hauptknoten ist RootDocument. (es kann eh nur Einen geben)
XML_EV_Players.RootDocument.ChildNodes.Nodes[Idx].ChildNodes['Rounds'].ChildNodes['Round1'].ChildNodes[i].ChildNodes['Shots']
// Warum gehst du hier über ChildNodes[x und da über ChildNodes.Nodes[x ?
// Eine Variante reicht doch.
XML_EV_Players.RootDocument.ChildNodes[Idx].ChildNodes['Rounds'].ChildNodes['Round1'].ChildNodes[i].ChildNodes['Shots']
// Pfade kann man zusammenfassen
XML_EV_Players.RootDocument.ChildNodes[Idx].ChildNodes['Rounds\Round1'].ChildNodes[i].ChildNodes['Shots']
// und man muß doch nicht immer wieder den selben Pfad auswerten ... vor den Schleifen speichern?
x := XML_EV_Players.RootDocument.ChildNodes[Idx];
for ... do
y := x.ChildNodes['Rounds\Round1'].ChildNodes[i];
for ... do
y.ChildNodes['Shots'] := ...;
// aber über XPath kann man natürlich auch noch nette Dinge machen
PS: Du solltest dir mal die NodeType(n) ansehn,
denn
MSXML hat nicht nur in seinem Baum (
DOM) nicht nur Nodes und Teste, sondern auch Steuerdaten.
So gibt es z.B. bei jedem Zeilenumbruch oder bei Leerzeichen zwischen
XML-Nodes in ChildNodes jeweils noch ein "Steuer"-Element.