3

私は xml プロジェクトを行ったことがないので、このデータをどうするかよくわかりません...

curl を使用してセールスフォースにリクエストを送信すると、解析が必要なレスポンスが返されます。私はsimplexmlを使いたいです。応答の一部を次に示します。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<loginResponse>
<result>
<metadataServerUrl>
https://na6-api.salesforce.com/services/Soap/m/18.0/
</metadataServerUrl>
<passwordExpired>
false
</passwordExpired>
<sandbox>
false
</sandbox>
<serverUrl>
https://na6-api.salesforce.com/services/Soap/u/18.0/
</serverUrl>
<sessionId>
!AQ4AQLtDIqY.
</sessionId>
<userId>

</userId>
<userInfo>
<accessibilityMode>
false
</accessibilityMode>
<currencySymbol>
$
</currencySymbol>
<orgDefaultCurrencyIsoCode>
USD
</orgDefaultCurrencyIsoCode>
<orgDisallowHtmlAttachments>
false
</orgDisallowHtmlAttachments>
<orgHasPersonAccounts>
false
</orgHasPersonAccounts>
<organizationId>

</organizationId>
<organizationMultiCurrency>
false
</organizationMultiCurrency>
<organizationName>
Ox 
</organizationName>
<profileId>
sdfgsdfg
</profileId>
<roleId>
sdfgsdfg
</roleId>
<userDefaultCurrencyIsoCode xsi:nil="true"/>
<userEmail>
###@gmail.com
</userEmail>
<userFullName>
### ###
</userFullName>
<userId>
asdfasdf
</userId>
<userLanguage>
en_US
</userLanguage>
<userLocale>
en_US
</userLocale>
<userName>
asdfasdf@gmail.com
</userName>
<userTimeZone>
America/Chicago
</userTimeZone>
<userType>
Standard
</userType>
<userUiSkin>
Theme3
</userUiSkin>
</userInfo>
</result>
</loginResponse>
</soapenv:Body>
</soapenv:Envelope>

とにかく、私はそのようなもの(データと呼びます)を

$results = simplexml_load_string($data);
var_dump($results);

そして、それは私にすべてのデータを返します...そして特定の部分にアクセスするには、$results->body->loginResponse->blah->blah...となります...

しかし、それは私にそれを与えているわけではなく、実際には何も返していません。空の単純なxmlオブジェクトだけです...

ある Web サイトで、これを正しく読み取るには XSLT が必要かもしれないと考えさせられました。
または、他の何かが私がトップにいないからだと思いました。

ヘルプ!

4

8 に答える 8

2

SimpleXMLを使用することはできますが、名前空間(例)を使用しているため、思ったほど単純soapenvではありません。SimpleXMLElement::children次のように使用することを検討してください。

$sxe = new SimpleXMLElement($data);
$login_response = $sxe->children('soapenv', TRUE)->Body->children('', TRUE)->loginResponse->result;
// Now that we have the <loginResponse> lets take a look at an item within it
echo $login_response->userInfo->userEmail;

最後に、そして重要なことに、セールスフォースのツールと例を見たことがありますか?

于 2010-05-05T21:52:59.220 に答える
2

SimpleXML needs a special treatment for namespaced XML (ref.)

于 2010-05-05T21:42:39.860 に答える
1

メイト、

通常、名前空間では、子を使用して呼び出しを行い、名前空間の要素を返す必要があります。php soapclient のような SOAP クライアントを使用することをお勧めしますが、これまで使用したことがないため、別の選択肢が 1 つあります。

$results = simplexml_load_string($data);
$xml = $results->children('http://schemas.xmlsoap.org/soap/envelope/');
var_dump($xml);

私はそれがどのように機能するかを信じています。

于 2010-12-02T02:48:20.330 に答える
0

For what it's worth, you may find you have an easier time using a PHP SoapClient for this task. O'Reilly has a good tutorial on PHP SOAP.

于 2010-05-05T21:43:15.953 に答える
0

また、Salesforce.com への SOAP 呼び出しを行うためのPHP Toolkitもチェックしてください。

于 2010-05-05T23:24:50.530 に答える
0

SAOP リクエストの場合、SOAP-ENV: タグを空白に置き換えることで、短いコードで簡単に解析できます。

$response = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>';

$response = html_entity_decode($response);
$response = str_replace(['soapenv:', 'ns1:', ':ns1', 'SOAP-ENV:'], ['', '', '', ''], $response);
$objXmlData = simplexml_load_string($response);
于 2016-09-17T12:54:14.330 に答える
0

私はsalatheによって構文に従おうとします。しかし、children('soapenv', TRUE)は機能しません。ジェイソンのchildren(' http://schemas.xmlsoap.org/soap/envelope/ ')は機能します。

したがって、Salesforce アウトバウンド メッセージのフィールド値 CreatedDate を読み取るには、次のコードが必要です。

$rcXML->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://soap.sforce.com/2005/09/outbound')->notifications->Notification->sObject->children('urn:sobject.enterprise.soap.sforce.com')->CreatedDate

それがどのように機能するかを理解するのに役立つように、同じコードと xml を使用して、より理解しやすい投稿を作成します。

http://amigotechnotes.wordpress.com/2013/11/16/parse-xml-with-namespace-by-simplexml-in-php/

于 2013-11-16T16:23:44.250 に答える