Erste Wert aus dem SOAP-response in php
Ich bin immer eine SOAP-Antwort zum SOAP-Aufruf, perfekt mit SOAP-ui, aber wenn ich das gleiche in php, ich bin nicht in der Lage zu durchqueren, um das gewünschte element(CreditId in diesem Fall), die ich will.
Im folgenden wird die SOAP-Antwort, die ich bekomme mit SOAP-ui :
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header/>
<soap-env:Body>
<n0:getProjectCreditListResponse xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style">
<EUserGuid>33/XIcx+3/GxWABQVoJXWA==</EUserGuid>
<EtCurrCreditList>
<item>
<PhaseId/>
<CreditcategoryDescrption>Project Information Forms</CreditcategoryDescrption>
<CreditId>CSD1GSP1L-1000008140</CreditId>
</item>
<item>
<PhaseId/>
<CreditcategoryDescrption>Project Information Forms</CreditcategoryDescrption>
<CreditId>CSD1GSP2L-1000008140</CreditId>
</item>
</EtCurrCreditList>
<EtErrorLogInfo/>
</n0:getProjectCreditListResponse>
</soap-env:Body>
</soap-env:Envelope>
Jetzt habe ich gegangen, durch die verschiedene ähnliche Fragen auf der Website, wo es wird empfohlen, zu tun, wie diese, um das gewünschte element :
$client = new SoapClient('wsdl file path',array('trace'=>1,'exceptions'=>1);
$res = $client->getCreditFormDataXml(array(input arguments));
$xml = simplexml_load_string($res);
$xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('n0', 'urn:sap-com:document:sap:soap:functions:mc-style');
foreach ($xml->xpath('//EtCurrCreditList//item//CreditId') as $item)
{
var_dump($item);
}
Jedoch bekomme ich eine Fehlermeldung, die besagt, dass
Warning: simplexml_load_string() erwartet parameter 1 zu string
Ich habe versucht, die Umwandlung der $res variable auf eine Zeichenfolge, sondern es gibt eine Fehlermeldung, dass
Objekt der Klasse stdClass konnte nicht in eine Zeichenfolge konvertiert werden
Aber wenn ich var_dump($res), bekomme ich eine Ausgabe wie diese :
object(stdClass)[2]
public 'EUserGuid' => string 'ß×!Ì~ßñ±X�PV‚WX' (length=16)
public 'EtCurrCreditList' =>
object(stdClass)[3]
public 'EtErrorLogInfo' =>
object(stdClass)[4]
Warum ist der code nicht zu den untergeordneten Knoten des EtCurrCreditList, so dass ich dann verarbeiten Sie auf den gewünschten Wert. - Gelöst
Letzten Ausgabe :
stdClass Object
(
[EUserGuid] => ß×!Ì~ßñ±XPV‚WX
[EtCurrCreditList] => stdClass Object
(
[item] => Array
(
[0] => stdClass Object
(
[PhaseId] =>
[PhaseDescription] =>
[CreditcategoryId] => CSD1GSL-1000008140
[CreditcategoryDescrption] => Project Information Forms
[CreditId] => CSD1GSP1L-1000008140
)
[1] => stdClass Object
(
[PhaseId] =>
[PhaseDescription] =>
[CreditcategoryId] => CSD1GSL-1000008140
[CreditcategoryDescrption] => Project Information Forms
[CreditId] => CSD1GSP2L-1000008140
)
[2] => stdClass Object
(
[PhaseId] =>
[PhaseDescription] =>
[CreditcategoryId] => CSD1GSL-1000008140
[CreditcategoryDescrption] => Project Information Forms
[CreditId] => CSD1GSP3L-1000008140
)
)
)
[EtErrorLogInfo] => stdClass Object
(
)
Hi danke für die Antwort, ich bin Sie die folgenden Schritte nur, aber das problem ist, dass simplexml_load_string - Funktion ist nicht zu erkennen, $res als eine Zeichenkette, die, so wie löse ich dieses problem zuerst. Auch ich habe versucht, kopieren Sie die xml-und die Verwendung dieser als Eingang und dann ausführen des oben aufgeführte Codes gibt es alle creditID ist aber nicht durch die Verwendung von $res als input
InformationsquelleAutor abhi191 | 2013-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden
echo"<pre>";print_r($res);
werden Sie besser in der Lage zu verstehen, wie zu Verfahren oder zeige uns das Ergebnis.Nun verwenden
gleiche für
EtCurrCreditList
undEtErrorLogInfo
und auch verschachtelte Schleifen, wenn diese Objekt alles enthalten.Aktualisierung nach Ihrem neuen output.
Sie können Durchlaufen, wie diese
können und ignorieren
EtErrorLogInfo
stdClass Object ( [EUserGuid] => ß×!Ì~ßñ±XPV‚WX [EtCurrCreditList] => stdClass Object ( ) [EtErrorLogInfo] => stdClass Object ( ) )
So scheint es, dass seine nicht-Traversierung die Knoten EtCurrCreditList, könnten Sie vorschlagen, jeden besonderen Grund.Hi nochmals vielen Dank für die Antwort, ich habe versucht, mithilfe von code zum abrufen der CreditID und diese lief :
foreach($res->EtCurrCreditList as $val1 ) { foreach($val1->item as $val2) { foreach($val2->CreditId as $val) { print_r($val); } } }
Jetzt bin ich nicht immer jede Ausgabe nur schwarzer Bildschirm, keine Fehlermeldung oder irgendetwas zu zeigen. Jede Hilfe, was zu tun ist, um die creditId..??aus der Antwort können Sie sehen, es ist nur der Wert für EUserGuid rest alle leer sind,
ja du hast Recht, ich bin nicht immer alle Werte für EtCurrCreditList, aber wenn ich die wsdl zu prüfen, die Reaktion in soapUI kann ich die Werte in EtCurrCreditList zu. Warum ist das SoapClient nicht geben diese Werte ? Keine Ahnung ?
können Sie die wsdl-url und eine Reihe von input-Werte, die Sie liefern in der Reihe(Eingabeargumente)
InformationsquelleAutor Rahul11