PHP - 将XML转换为PHP中的数组 - 在php中解析soap xml并将其存储在数据库中

PHP - 将XML转换为PHP中的数组 - 在php中解析soap xml并将其存储在数据库中

问题描述:

我想转换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

真的很感激我得到的任何帮助。

谢谢您的期待。

问候

最好的解决办法是使用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

如果您不能使用SoapClient来检索PHP对象中的SOAP响应,请使用SimpleXML来分析肥皂响应。

例如(其中$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

+0

嗨,谢谢你的回应乔恩。它确实有效。与给出的其他答案一起。非常感谢。 – BasicGem

解析SOAP响应使用下面的代码阵列:

你只需要调用与SOAP-XML功能。之后,它将返回一个Plain 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);