如何将单个xml对象转换为数组

时间:2017-01-10 16:54:05

标签: php arrays xml xml-parsing

我有这个xml响应,我想转换为关联数组,我已经尝试了很多解决方案,但没有成功。

<EXPEDICIONES NUM="1">
    <EXPEDICION>
        <PORTES>Pagados</PORTES>
        <DESCRIPCION_CLIENTE_INGLES>ENTREGA EFECTUADA</DESCRIPCION_CLIENTE_INGLES>
        <CARACTER_TEL>-</CARACTER_TEL>
        <PESO>2.6</PESO>
        <ENTREGA_SABADO>N</ENTREGA_SABADO>
        <DEBIDO>0</DEBIDO>
        <VALOR_TEL>-</VALOR_TEL>
        <RECOGIDA_SABADO>N</RECOGIDA_SABADO>
        <REMITE_PISO>-</REMITE_PISO>
        <REMITE_PROVINCIA>LISBOA</REMITE_PROVINCIA>
        <DESTINA_TIPO_NUM>IN</DESTINA_TIPO_NUM>
        <DESTINA_PUERTA>-</DESTINA_PUERTA>
        <PAGADO>3.38</PAGADO>
        <EXISTEN_APUNTES></EXISTEN_APUNTES>
        <DESTINA_PISO>-</DESTINA_PISO>
        <DESTINA_CCC_ID>-</DESTINA_CCC_ID>
        <FAMILIA>715338323</FAMILIA>
    </EXPEDICION>
</EXPEDICIONES>

这是我生成的代码

$soap_request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="http://consultaExpediciones.servicios.webseur">
   <soapenv:Header/>
   <soapenv:Body>
      <con:consultaExpedicionesStr>
         <con:in0>S</con:in0>
         <con:in1></con:in1>
         <con:in2></con:in2>
         <con:in3></con:in3>
         <con:in4>14097-83</con:in4>
         <con:in5>03-01-2016</con:in5>
         <con:in6>05-12-2017</con:in6>
         <con:in7></con:in7>
         <con:in8></con:in8>
         <con:in9></con:in9>
         <con:in10>83080189516234</con:in10>
         <con:in11>0</con:in11>
         <con:in12>velvet83</con:in12>
         <con:in13>velvet83</con:in13>
         <con:in14>N</con:in14>
      </con:consultaExpedicionesStr>
   </soapenv:Body>
</soapenv:Envelope>>';
$header = array(
    "Content-type: text/xml;charset=\"utf-8\"",
    "Accept: text/xml",
    "Cache-Control: no-cache",
    "Pragma: no-cache",
    "Content-length: " . strlen($soap_request),
);
$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, "https://ws.seur.com/webseur/services/WSConsultaExpediciones");
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true);
curl_setopt($soap_do, CURLOPT_POST, true);
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $soap_request);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header);

$result = (curl_exec($soap_do));

echo "<pre>";
print_r($result);
echo "</pre>";
die();

我尝试过使用SimpleXMLElement类的解决方案,然后对xml进行json编码,但它没有用。

$xml = new SimpleXMLElement($xmlString);

$json = json_encode($xml);   
$array = json_decode($json,TRUE);

2 个答案:

答案 0 :(得分:1)

使用PHP SimpleXML扩展非常简单。

读取您的XML(返回一个对象)

$xml = new SimpleXMLElement($xmlString);

因为你想要一个关联数组,只需用json

对其进行编码和解码
$json = json_encode($xml);
$array = json_decode($json,TRUE);

http://php.net/manual/en/book.simplexml.php

答案 1 :(得分:0)

使用SimpleXml库

$xml = new SimpleXMLElement($yourXmlString);

if($xml)
{
  $arrayDef = array();
  foreach ($xml->EXPEDICION as $item) {
     $arrayTemp = array();
     $arrayTemp['portes'] = (string)$item->PORTES;
     $arrayTemp['peso'] = (string)$item->PESO;

     array_push($arrayDef, $arrayTemp);
  }

  echo '<pre>' . print_r($arrayDef, true) . '</pre>';
}

$ arrayDef将是你的最终数组