Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: Jabber XMLStream parsen

  Alt 23. Feb 2006, 15:32
Hallo Michael,

das Problem hast du richtig erkannt, die Lösung ist denkbar einfach: Nicht das Iterator-Interface global speichern, sondern das Wurzel-Element.

Delphi-Quellcode:
procedure TForm1.OnJabberMessage(Sender: TObject; const Msg: IJabberMsg; const Tag: IXMLTag);
begin
  self.MsgTag := Tag;
  // ...
end;
Jetzt kannst du jederzeit GetTagValue(MsgTag, 'color') rufen und wirst auch gehört. Alternativ geht auch sowas:

Delphi-Quellcode:
function ParseStr(var s: string; delimiters: string; purge: boolean = true): string;
var
  i: integer;
begin
  i := 0;
  while (i < Length(s)) and (Pos(s[Succ(i)], delimiters) = 0) do
    Inc(i);
  Result := Copy(s, 1, i);
  Delete(s, 1, i + Ord(purge));
end;

function TDemoForm.GetData(tag: IXMLTag; path: String): String;
var
  ti: IXMLTagIterator;
  q: String;
begin
  while Assigned(tag) and (path <> '') do
  begin
    q := ParseStr(path, '/');
    ti := tag.QueryTag(q);
    tag := ti.Next;
  end;
  if Assigned(tag)
    then Result := tag.Data
    else Result := '';
end;

procedure TDemoForm.QueryDataActionExecute(Sender: TObject);
begin
  ShowMessage(GetData(MsgTag, 'foobar/color'));
end;
Grüße vom marabu
  Mit Zitat antworten Zitat