2017-01-11 22 views
0

私はまだXMLとPHPを組み合わせて多くの作業をしましたが、SOAP呼び出しの後にXMLを受け取っているので、私はそれに対処しなければならないと思います。名前空間付きSimpleXMLelement

いいえ。だから私は次のように戻ってくる:

<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://soap.sforce.com/schemas/class/jRecordBroadcastRowWS" xmlns:bcr="http://soap.sforce.com/schemas/class/jRecordUtils" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:body> 
     <queryrequestsresponse> 
      <result> 
       <bcr:customid>REQ16569</bcr:customid> 
       <bcr:externalid xsi:nil="true"> 
        <bcr:recordid>a035700001CM60kAAD</bcr:recordid> 
        <bcr:requestid>a1J5700000857EYEAY</bcr:requestid> 
       </bcr:externalid> 
      </result> 
      <result> 
       <bcr:customid>SRQ100784</bcr:customid> 
       <bcr:externalid xsi:nil="true"> 
        <bcr:recordid>a033E000001PxfAQAS</bcr:recordid> 
        <bcr:requestid>a1J3E0000000GSaUAM</bcr:requestid> 
       </bcr:externalid> 
      </result> 
     </queryrequestsresponse> 
    </soapenv:body> 
</soapenv:envelope> 

私はrecordidを取得しようとしました。ただ、私は右のそれを得たことを確認するために(私が生かすようBCRを使用するので)必ず私はgetNamespacesを取得した後、しかし、それはレコードIDの

$xmlresponse = new SimpleXMLElement($response); 
$recordid = $xmlresponse->children('soapenv', true)->Body->queryrequestsresponse->result->children('BCR', true)->externalid->recordid; 
var_dump($recordid); 

に格納されていない、私はをもたらした、)(vardumpをしました以下。

array(4) { 
["soapenv"]=> string(41) "http://schemas.xmlsoap.org/soap/envelope/" 
[""]=> string(58) "http://soap.sforce.com/schemas/class/jRecordBroadcastRowWS" 
["BCR"]=> string(49) "http://soap.sforce.com/schemas/class/jRecordUtils" 
["xsi"]=> string(41) "http://www.w3.org/2001/XMLSchema-instance" 
} 

これらのIDはどのように解析されるのですか。構文を間違えてしまったのですか?

答えて

0

名前空間が混在するSimpleXMLは難しいです。 XPathを使用することは簡単です:

foreach ($xmlresponse->xpath('//bcr:recordid') as $sxe) { 
    echo (string) $sxe . "\n"; 
} 

出力:

a035700001CM60kAAD 
a033E000001PxfAQAS 
関連する問題