Asheesh
Asheesh

Reputation: 161

XML To array in php

i have to got response in XML . and i want to convert xml data to array using php. my XML record.

 <soap:Body>
    <CreateContact xmlns="http://www.tigerpawsoftware.com">
     <pram>
       <OfficePhoneNumber>8387909727</OfficePhoneNumber>
       <EmailAddress>[email protected]</EmailAddress>
      </pram>
    </CreateContact>
  </soap:Body>

Target Array as:-

array('OfficePhoneNumber' => 8387909727,
      'EmailAddress' => [email protected] )

Upvotes: 0

Views: 1031

Answers (2)

Murad Hasan
Murad Hasan

Reputation: 9583

Online Example: https://3v4l.org/KcJMX, You can optimize your primary array, Just learn from function.xml-parse-into-struct.php, I hope you will do it.

Use xml_parser_create and xml_parse_into_struct to make your desire array.

Using xml_parse_into_struct you will got two array, one is indexes and other is values. So you can generate your desire result from those index and values, As you the indexes you call easily make the desire array.

Also look at those ($index, $vals) arrays.

$xml = '<soap:Body>
            <CreateContact xmlns="http://www.tigerpawsoftware.com">
             <pram>
               <OfficePhoneNumber>8387909727</OfficePhoneNumber>
               <EmailAddress>[email protected]</EmailAddress>
              </pram>
            </CreateContact>
          </soap:Body>';

$p = xml_parser_create();
xml_parse_into_struct($p, $xml, $vals, $index);
xml_parser_free($p);

echo '<pre>';
$out = array("OfficePhoneNumber" => $vals[$index['OFFICEPHONENUMBER'][0]]['value'], "EmailAddress" => $vals[$index['EMAILADDRESS'][0]]['value']);
print_r($out);

Result

Array
(
    [OfficePhoneNumber] => 8387909727
    [EmailAddress] => [email protected]
)

Upvotes: 1

Sofiene Djebali
Sofiene Djebali

Reputation: 4508

You can achieve this using the simplexml_load_string() function

PHP

$xml = simplexml_load_string('MY_XML_CONTENT', "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
var_dump($array);

var_dump should output :

array(1) {
  ["CreateContact"]=>
  array(1) {
    ["pram"]=>
    array(2) {
      ["OfficePhoneNumber"]=>
      string(10) "8387909727"
      ["EmailAddress"]=>
      string(21) "[email protected]"
    }
  }
}

Here is a EvalIN

Upvotes: 0

Related Questions