PHP - преобразование XML в массив в PHP - анализ мыльного XML в php и сохранение его в базе данных - PullRequest
1 голос
/ 22 сентября 2011

Я хочу преобразовать ответ мыльного XML и сохранить его в базе данных. Вот 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>example2@example2.com</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

Был бы очень признателен за любую помощь, которую я получил.

Спасибо в ожидании.

Привет

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Лучшим решением будет использование 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;

?>

Который вы можете затем сохранить в базе данных.

1 голос
/ 22 сентября 2011

Если вы не можете использовать SoapClient для получения ответа SOAP в объекте PHP, тогда используйте 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 голосов
/ 18 февраля 2017

Разобрать ответ SOAP на массив, используя следующий код:

Вам просто нужно вызвать функцию с SOAP-XML. После этого он вернет простой XML, затем вы должны преобразовать его в массив, используя JSON encode-decode.

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...