【问题标题】:How to convert single xml object to array如何将单个xml对象转换为数组
【发布时间】:2017-01-10 16:54:05
【问题描述】:

我有这个 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);

【问题讨论】:

  • 所以你尝试了“许多解决方案”......请问这些是什么?因为我看不到您在问题中所做的任何尝试...
  • 关于 xml2array 有很多问题,我已经尝试了其中的大部分。也许我遇到了问题,我使用 curl 从肥皂调用中获得了 xml 响应。我尝试了两种已回答的解决方案,但都没有奏效。
  • “没有用”没有帮助。发布您尝试过的代码,并解释您认为到底是什么错误。否则,这看起来就像您只是在寻找其他人为您工作......

标签: php arrays xml xml-parsing


【解决方案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

【讨论】:

  • $xml = new SimpleXMLElement($result); $json = json_encode($xml); $array = json_decode($json, TRUE); echo "&lt;pre&gt;"; print_r($array); echo "&lt;/pre&gt;"; 它返回了一个空数组。
  • 不一定是关联数组,索引数组也可以解决问题。
  • @HabibJutt 如果您可以提供一些代码,我可以为您提供更好的帮助。您从哪里获取 XML 数据?
  • 我正在使用 CURL 从一个肥皂调用中获取 XML 数据。
  • @HabibJutt 你能编辑你的问题并插入适当的代码吗?因为如果我将您的 XML 插入到我的 sn-p 中,它就会很好地工作。您确定您从 CURL 请求中获得了正确的数据吗?
【解决方案2】:

使用 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 将是你的最终数组

【讨论】:

  • 对不起,它没有用。 $xml = new SimpleXMLElement($result); if ($xml) { $arrayDef = array(); foreach ($xml-&gt;EXPEDICION as $item) { $arrayTemp = array(); $arrayTemp['portes'] = $item-&gt;PORTES; $arrayTemp['peso'] = $item-&gt;PESO; //etc... array_push($arrayDef, $arrayTemp); } } echo "&lt;pre&gt;"; print_r($arrayDef); echo "&lt;/pre&gt;";
猜你喜欢
  • 2022-01-15
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多