2011-09-22 12 views
1

私はsoap xmlレスポンスを変換してデータベースに格納したいと思っています。ここに私が持っているXMLがあります。PHP - XMLをPHPで配列に変換する - PHPでsoap xmlを解析してデータベースに格納する

<ENV:Envelope xmlns:ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com/soap/example"> 
    <ENV:Body> 
     <ns1:GetCentresResponse> 
     <ExampleCentre> 
      <ns1:Cent> 
       <ID>200</ID> 
       <Name>example2</Name> 
       <Code>ex2</Code> 
       <Email>[email protected]</Email> 
       <Address1>example2, example2 </Address1> 
       <Address2>example2, example2 </Address2> 
       <City>example2</City> 
       <PostCode>111111</PostCode> 
       <Telephone>1111111111</Telephone> 
       <Location>11.11,-11.11</Location> 
       <URL>/example2/exam2/ex2</URL> 
      </ns1:Cent> 
     </ExampleCentre> 
     </ns1:GetCentresResponse> 
    </ENV:Body> 
</ENV:Envelope> 

私はこの石鹸レスポンスをサーバーから取得します。私はこれを配列に変換してデータベースに格納したいと思います。私は何をすべきか?私は答えがかなり正直であるかもしれないことを知っている、しかしねえ、初心者です:D

私は本当に助けていただきありがとうございます。

ありがとうございます。

よろしく

答えて

2

最善の解決策はそうのように、あなたのオブジェクトを返し、その配列にこのオブジェクトを変換しますコールを行うにはPHPののSoapClientクラスを使用することです:あなたはどちら

<?php 
$client = new SoapClient("http://localhost/code/soap.wsdl"); 

// Soap call with HelloWorld() method 
$something = $client->HelloWorld(array('option1' => 'attribute1')); 

// Convert object to array 
$array = (array)$something; 

?> 

データベースに格納することができます。

+0

SOAP呼び出しの戻り値には、そのXMLファイルと一致するメンバーを持つオブジェクトが含まれていると言いたいことがあります。 –

+0

これはありがとう、このクラスについて知らなかった:) –

+0

こんにちはLhunar、ありがとうございます。それは働いた:) – BasicGem

1

SoapClientを使用してPHPオブジェクトのSOAP応答を取得できない場合は、SimpleXMLを使用してSOAP応答を解析します。例えば

$xmlstrは、SOAP応答が含まれている場合):

$element = new SimpleXMLElement($xmlstr); 
$centerElement = $element->Body->GetCentresResponse->ExampleCentre->Cent; 

$center = array(
    $centerElement->ID, 
    $centerElement->Name, 
    $centerElement->Code, 
    $centerElement->Email, 
    $centerElement->Address1, 
    $centerElement->Address2, 
    $centerElement->City, 
    $centerElement->PostCode, 
    $centerElement->Telephone, 
    $centerElement->Location, 
    $centerElement->URL, 
); 

今、あなたがデータベースに$centerを保存することができます。次のコードを使用してArrayに

+0

こんにちは、応答Jonありがとうございます。それはうまくいった。与えられた他の答えと一緒に。どうもありがとう。 – BasicGem

0

パースのSOAP応答:

は、あなただけのSOAP-XMLで関数を呼び出す必要があります。その後、プレーンXMLを返します。次にJSONエンコードデコードを使用して配列に変換する必要があります。

$plainXML = mungXML($soapXML); 
$arrayResult = json_decode(json_encode(SimpleXML_Load_String($plainXML, 'SimpleXMLElement', LIBXML_NOCDATA)), true); 


// FUNCTION TO MUNG THE XML SO WE DO NOT HAVE TO DEAL WITH NAMESPACE 
function mungXML($xml) 
{ 
    $obj = SimpleXML_Load_String($xml); 
    if ($obj === FALSE) return $xml; 

    // GET NAMESPACES, IF ANY 
    $nss = $obj->getNamespaces(TRUE); 
    if (empty($nss)) return $xml; 

    // CHANGE ns: INTO ns_ 
    $nsm = array_keys($nss); 
    foreach ($nsm as $key) 
    { 
     // A REGULAR EXPRESSION TO MUNG THE XML 
     $rgx 
     = '#'    // REGEX DELIMITER 
     . '('    // GROUP PATTERN 1 
     . '\<'    // LOCATE A LEFT WICKET 
     . '/?'    // MAYBE FOLLOWED BY A SLASH 
     . preg_quote($key) // THE NAMESPACE 
     . ')'    // END GROUP PATTERN 
     . '('    // GROUP PATTERN 2 
     . ':{1}'   // A COLON (EXACTLY ONE) 
     . ')'    // END GROUP PATTERN 
     . '#'    // REGEX DELIMITER 
     ; 
     // INSERT THE UNDERSCORE INTO THE TAG NAME 
     $rep 
     = '$1'   // BACKREFERENCE TO GROUP 1 
     . '_'   // LITERAL UNDERSCORE IN PLACE OF GROUP 2 
     ; 
     // PERFORM THE REPLACEMENT 
     $xml = preg_replace($rgx, $rep, $xml); 
    } 
    return $xml; 
} 

print_r($arrayResult);