Aktuell sind die Schleifen wohl das Beste.
Leider hat FindNodes wirklich ein paar "Macken".
Darum arbeite ich schon seit 'ner Weile an einer XPath-Variante,
aber leider hängt es da an einigen Stellen. (vorallem an einer
RegEx-Anbindung, welche einige String-Vergleiche besser behandeln soll.)
.FindeNodes ohne Pfade sollte mit dieser Änderung bessere Ergebnisse liefern
Delphi-Quellcode:
Function TXMLNodeList.GetFindNodeArray(Name: TWideString): TXMLNodeArray;
Var N: TXMLNode;
A, A2: TXMLNodeArray;
i, i2: Integer;
Begin
//Result := nil;
//N := NodeU[Name];
//If Assigned(N) Then Begin
// SetLength(Result, 1);
// Result[0] := N;
//End;
{}Result := NodeList[Name];
A := NodeList['*'];
For i := 0 to High(A) do Begin
A2 := A[i].FindNodes[Name];
If Assigned(A2) Then Begin
i2 := Length(Result);
SetLength(Result, i2 + Length(A2));
MoveMemory(@Result[i2], @A2[0], Length(A2) * SizeOf(TXMLNode));
End;
End;
End;
XML.FindNodes['code'] findet zumindestens alle 6 Code-Nodes.