2012-03-15 13 views
0

PHPからSOAP経由でXMLデータセットを使用しています。私はxmlから値を解析して、それらの値をデータベースに取り込むことができるようにしようとしています。私はこれを行うための最善の方法を見つけるためにしばらく検索してきました。ここではいくつかのXMLの例です:PHP SOAPレスポンスからXMLデータを解析する最も効率的な方法はSimpleXMLですか?

のSimpleXMLと名前空間/ XPathを使用
<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
<PaymentNotification xmlns="http://apilistener.envoyservices.com"> 
    <payment> 
    <uniqueReference>ESDEUR11039872</uniqueReference>  
    <epacsReference>74348dc0-cbf0-df11-b725-001ec9e61285</epacsReference> 
    <postingDate>2010-11-15T15:19:45</postingDate> 
    <bankCurrency>EUR</bankCurrency> 
    <bankAmount>1.00</bankAmount> 
    <appliedCurrency>EUR</appliedCurrency> 
    <appliedAmount>1.00</appliedAmount> 
    <countryCode>ES</countryCode> 
    <bankInformation>Sean Wood</bankInformation> 
    <merchantReference>ESDEUR11039872</merchantReference> 
    </payment> 
    </PaymentNotification> 
    </soap:Body> 
</soap:Envelope> 

、私はタグと内の値へのアクセス権を持っています。しかし、私は値を解析することができるように見える唯一の方法は、ノード内の各要素をループし、その名前をチェックして、それが私の文字列の比較と一致する場合、それを配列変数に代入することです。私は複数の支払いを解析する必要があります。例:

//all payments 
foreach($data->children() as $child) { 
    //one payment 
    foreach($child->children() as $subChild) { 

    switch($subChild->getName()) { 
     case "bankCurrency": 
      $newPayment['bankCurrency'] = (string)$subChild; 
     break; 
    case "bankPayment": 
     $newPayment['bankAmount'] = (string)$subChild; 
     break; 
    } 
    } 
} 

これはこれを行う最良の方法ですか?それとも私はどこか別の方法で完全に逃したのですか?ありがとう!

+0

['SoapClient'](http://php.net/manual/en/class.soapclient.php)を使用してみませんか? –

+0

私はあなたがこの目的のためにPHPビルドSOAP実装を使うべきだと思います。そして、単純なXMLでプレーする必要はありません。 –

+0

ああ、私はすでにXMLを取得するためにPHPの石鹸クライアントを使用しました。これがその結果です。私は応答を受け取り、simple_xml_load_stringを通して実行し、今すぐソートしようとしているSimpleXMLオブジェクトを持っています。それは最善のアプローチではありませんか? – theninjasquad

答えて

0

多くの試行錯誤の末、実際にxml要素にもっと簡単にアクセスできることに気付きました。最初のループの中から、$ child-> bankCurrencyを使って要素に直接アクセスできます。内部ループに入り、その解析を行う必要はありません。私は最終的にこのPHPのXMLのものの周りに頭をラッピングしています。