![]() |
PHP Array über Soap verarbeiten...
Hallo...
Ich habe mal wieder nen Problem, und zwar habe einen Soap Client, der auf einen PHP Soap Service (ohne WSDL) zugreift. Die PHP funktion getBuddyList liefert mir ein PHP Array zurück und ich weiß leider nicht, wie ich das in delphi jetzt verarbeiten kann. Wenn ich bei der Funktionsdeklaration in der invoke als result z.B wideString angebe
Delphi-Quellcode:
kommt es folgendermaßen zurück.
function getBuddyList(sessionID:string;status:string): WideString; stdcall;
Delphi-Quellcode:
<item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Map"><item><key xsi:type="xsd:string">UserID</key><value xsi:type="xsd:string">10000206</value></item><item><key xsi:type="xsd:string">UserName</key><value xsi:type="xsd:string">fluffy</value></item><item><key xsi:type="xsd:string">firstname</key><value xsi:type="xsd:string">Thomas</value></item><item><key xsi:type="xsd:string">lastname</key><value xsi:type="xsd:string">Memenga</value></item><item><key xsi:type="xsd:string">country</key><value xsi:type="xsd:string">DE</value></item><item><key xsi:type="xsd:string">city</key><value xsi:type="xsd:string">Springe</value></item></item><item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Map"><item><key xsi:type="xsd:string">UserID</key><value xsi:type="xsd:string">10000201</value></item><item><key xsi:type="xsd:string">UserName</key><value xsi:type="xsd:string">kingflo</value></item><item><key xsi:type="xsd:string">firstname</key><value xsi:type="xsd:string">Florian</value></item><item><key xsi:type="xsd:string">lastname</key><value xsi:type="xsd:string">Gilde</value></item><item><key xsi:type="xsd:string">country</key><value xsi:type="xsd:string">DE</value></item><item><key xsi:type="xsd:string">city</key><value xsi:type="xsd:string">Hamburg</value></item></item><item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Map"><item><key xsi:type="xsd:string">UserID</key><value xsi:type="xsd:string">10000213</value></item><item><key xsi:type="xsd:string">UserName</key><value xsi:type="xsd:string">mickey</value></item><item><key xsi:type="xsd:string">firstname</key><value xsi:type="xsd:string">Michael</value></item><item><key xsi:type="xsd:string">lastname</key><value xsi:type="xsd:string">Kock</value></item><item><key xsi:type="xsd:string">country</key><value xsi:type="xsd:string">DE</value></item><item><key xsi:type="xsd:string">city</key><value xsi:type="xsd:string">Hamburg</value></item></item><item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Map"><item><key xsi:type="xsd:string">UserID</key><value xsi:type="xsd:string">10000207</value></item><item><key xsi:type="xsd:string">UserName</key><value xsi:type="xsd:string">Sam75</value></item><item><key xsi:type="xsd:string">firstname</key><value xsi:type="xsd:string">Kock</value></item><item><key xsi:type="xsd:string">lastname</key><value xsi:type="xsd:string">Sandra</value></item><item><key xsi:type="xsd:string">country</key><value xsi:type="xsd:string">DE</value></item><item><key xsi:type="xsd:string">city</key><value xsi:type="xsd:string">Hamburg</value></item></item><item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Map"><item><key xsi:type="xsd:string">UserID</key><value xsi:type="xsd:string">10000200</value></item><item><key xsi:type="xsd:string">UserName</key><value xsi:type="xsd:string">soularis</value></item><item><key xsi:type="xsd:string">firstname</key><value xsi:type="xsd:string">Stefan</value></item><item><key xsi:type="xsd:string">lastname</key><value xsi:type="xsd:string">Schulze</value></item><item><key xsi:type="xsd:string">country</key><value xsi:type="xsd:string">DE</value></item><item><key xsi:type="xsd:string">city</key><value xsi:type="xsd:string">Hamburg</value></item></item><item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Map"><item><key xsi:type="xsd:string">UserID</key><value xsi:type="xsd:string">10000205</value></item><item><key xsi:type="xsd:string">UserName</key><value xsi:type="xsd:string">teichlotte</value></item><item><key xsi:type="xsd:string">firstname</key><value xsi:type="xsd:string">Iris</value></item><item><key xsi:type="xsd:string">lastname</key><value xsi:type="xsd:string">Teichmann</value></item><item><key xsi:type="xsd:string">country</key><value xsi:type="xsd:string">DE</value></item><item><key xsi:type="xsd:string">city</key><value xsi:type="xsd:string">Stocksee</value></item></item><item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Map"><item><key xsi:type="xsd:string">UserID</key><value xsi:type="xsd:string">10000210</value></item><item><key xsi:type="xsd:string">UserName</key><value xsi:type="xsd:string">wbeeck</value></item><item><key xsi:type="xsd:string">firstname</key><value xsi:type="xsd:string">Wilfried</value></item><item><key xsi:type="xsd:string">lastname</key><value xsi:type="xsd:string">Beeck</value></item><item><key xsi:type="xsd:string">country</key><value xsi:type="xsd:string">DE</value></item><item><key xsi:type="xsd:string">city</key><value xsi:type="xsd:string">Wendtorf</value></item></item><item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Map"><item><key xsi:type="xsd:string">UserID</key><value xsi:type="xsd:string">10000204</value></item><item><key xsi:type="xsd:string">UserName</key><value xsi:type="xsd:string">yutha</value></item><item><key xsi:type="xsd:string">firstname</key><value xsi:type="xsd:string">Jutta</value></item><item><key xsi:type="xsd:string">lastname</key><value xsi:type="xsd:string">Liwanetz</value></item><item><key xsi:type="xsd:string">country</key><value xsi:type="xsd:string">DE</value></item><item><key xsi:type="xsd:string">city</key><value xsi:type="xsd:string">Hamburg</value></item></item>
|
Re: PHP Array über Soap verarbeiten...
schade... hat da keiner ne gute idee?
also ich habe bei dem WSDL tutorial bei delphi source folgenes gesehen?
Delphi-Quellcode:
dort machen die es mit dem ResultElementArray, aber den typen gibt es ja bei mir nicht... also habe ich mir den Typ in meiner IData.pas erstellt:
procedure TForm1.Button1Click(Sender: TObject);
var gsp: GoogleSearchPort; result: GoogleSearchResult; i: integer; rea: ResultElementArray; begin gsp:=GetGoogleSearchPort(true); result:=gsp.doGoogleSearch('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', Edit1.Text, 0, 10, true, 'countryDE', false, 'lang_de', 'UTF-8', 'UTF-8'); if Assigned(result) then begin Label1.Caption:=IntToStr(result.estimatedTotalResultsCount)+ ' Ergebnisse'; Memo1.Clear; rea:=result.resultElements; for i:=0 to high(rea) do begin Memo1.Lines.Add(rea[i].Title); Memo1.Lines.Add(rea[i].URL); Memo1.Lines.Add(rea[i].Summary); Memo1.Lines.Add(''); end; result.Free; end; end;
Delphi-Quellcode:
das PHP Array, welches zurück kommt ieht z.B so aus:
ResultElement = class; { "urn:stryykeSoapServer" }
ResultElement = class(TRemotable) private FUserID: WideString; FUserName: WideString; Ffirstname: WideString; Flastname: WideString; Fcountry: WideString; FOnline: Boolean; Fcity: WideString; public published property userid: WideString read FUserID write FUserID; property UserName: WideString read FUserName write FUserName; property firstname: WideString read Ffirstname write Ffirstname; property lastname: WideString read Flastname write Flastname; property country: WideString read Fcountry write Fcountry; property Online: Boolean read FOnline write FOnline; property city: WideString read Fcity write Fcity; end; ResultElementArray = array of ResultElement; { "urn:stryykeSoapServer" }
Code:
jetzt habe ich also bei der functions definition folgenes:
[0] => Array
( [UserID] => 10000206 [UserName] => fluffy [firstname] => Thomas [lastname] => Memenga [country] => DE [city] => Springe ) [1] => Array ( [UserID] => 10000202 [UserName] => giri01 [Online] => 1 [firstname] => Rajiv [lastname] => Giri [country] => DE [city] => Hamburg ) [2] => Array ( [UserID] => 10000203 [UserName] => giri02 [firstname] => Rajiv [lastname] => Giri [country] => DE [city] => Hamburg )
Delphi-Quellcode:
und mein test aufruf sieht so aus:
function getBuddyList(sessionID:string;status:string): ResultElementArray; stdcall;
Delphi-Quellcode:
so die anzahl der schleife ist korrekt, und wird auch je nach dem wieviele buddys ich habe ausgeführt... (das ist ja schonma was)
var
buddys: ResultElementArray; i:integer; begin buddys:=(SoapConnection1.GetSOAPServer as IDataMod).getBuddyList(sessionID,'all'); for i:=0 to high(buddys) do begin Memo1.Lines.Add(buddys[i].UserName); end; end; leider ist der UserName irgendwie leer... ('') und ich weiß nicht wieso, bzw was ich jetzt dafür tun kann, damit dass jetzt mal vernünftig funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz