Vergessen wir das erstmal. Das war noch eine ziemlich unausgereifte Idee.
Aber da gibt es noch ein Problem:
Delphi-Quellcode:
function GetTagValue(iter: IXMLIteratorEx; ATag: String): String;
var
xn : IXMLNode;
begin
while iter.HasNext do
begin
xn := iter.Next;
if xn.IsTag then
with xn as IXMLTag do
begin
if (xn as IXMLTag).Name = ATag then
begin
result := (xn as IXMLTag).Data;
exit;
end
else
begin
result := GetTagValue(children, ATag);
end;
end;
end;
end;
Diese Funktion soll mir den Inhalt eines Tags zurückgeben. So weit so gut. Funktioniert auch, aber nur einmal, beim ersten Mal. Das Problem wird dfaran liegen, dass ich den Paramter
iter global deklarieren musste:
Delphi-Quellcode:
procedure TForm1.OnJabberMessage(Sender: TObject; const Msg: IJabberMsg; const Tag: IXMLTag);
var
sl : TStringList;
begin
XI := Tag.Children; // global!!!
Und dann der Aufruf:
Delphi-Quellcode:
procedure TForm1.cbTagsChange(Sender: TObject);
begin
ShowMessage(cbTags.Text + ': ' + GetTagValue(XI, cbTags.Text));
end;
Ich denke, ich weiß, was passiert: XI steht nach dem Aufruf an der Stelle, an der er was gefunden hatte. Wie löse ich das Problem jetzt am geschicktesten?