Solved

xml to array reading the array

Posted on 2009-05-20
4
241 Views
Last Modified: 2013-12-12
Hi

i use the function below to parse a xml file

which outputs the xml into an array like this below

how would i just read the " [year] => 2005 "  part

as i need to be able get that and just echo it

Regards

Pete




Array
(
    [decoded_vin_data] => Array
        (
            [decoder_version] => 6.0.1
            [decoder_error] => Array
                (
                    [error_code] => Array
                        (
                        )

                    [error_message] => Array
                        (
                        )

                )

            [vin_number] => Array
                (
                    [vin_error] => Array
                        (
                            [error_code] => Array
                                (
                                )

                            [error_message] => Array
                                (
                                )

                        )

                    [common_data] => Array
                        (
                            [basic_data] => Array
                                (
                                    [year] => 2005
                                    [make] => Chrysler
                                    [model] => PT Cruiser
                                    [trim] => Touring
                                    [style] => Touring 4dr Wagon (2.4L 4cyl 5M)
                                    [vehicle_type] => Car
                                    [body_type] => Wagon
                                    [body_subtype] => Array
                                        (
                                        )

                                    [doors] => 4
                                    [model_number] => PTCP44
                                    [package_code] => Array
                                        (
                                        )

                                    [country_of_manufacture] => Array
                                        (
                                        )

                                    [plant] => TOLUCA, MEXICO
                                )

                            [specifications] => Array
                                (
                                    [category] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [drive_type] => FWD
                                                    [hub_type_4wd] => Array
                                                        (
                                                        )

                                                )

                                            [1] => Array
                                                (
                                                    [acceleration_to_100] => 0
                                                    [acceleration_to_60] => 0
                                                    [aerodynamic_drag] => 0
                                                    [braking_distance] => 0
                                                    [turning_circle] => 36.7
                                                )




<?php	
 
$clean_xml_array=xml2array('file.xml');
	echo '<pre>';
	print_r($clean_xml_array);
 
 
 
	//This function was taken from php.net (http://us2.php.net/manual/en/function.xml-parse.php)
	// user: lz_speedy at web dot de - post date:30-Dec-2008 06:20
	//this function turns an XML string in to a well structured array
	function xml2array($url, $get_attributes = 1, $priority = 'tag')
	{
	    $contents = "";
	    if (!function_exists('xml_parser_create'))
	    {
	        return array ();
	    }
	    $parser = xml_parser_create('');
	    if (!($fp = @ fopen($url, 'rb')))
	    {
	        return array ();
	    }
	    while (!feof($fp))
	    {
	        $contents .= fread($fp, 8192);
	    }
	    fclose($fp);
	    xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
	    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
	    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
	    xml_parse_into_struct($parser, trim($contents), $xml_values);
	    xml_parser_free($parser);
	    if (!$xml_values)
	        return; //Hmm...
	    $xml_array = array ();
	    $parents = array ();
	    $opened_tags = array ();
	    $arr = array ();
	    $current = & $xml_array;
	    $repeated_tag_index = array ();
	    foreach ($xml_values as $data)
	    {
	        unset ($attributes, $value);
	        extract($data);
	        $result = array ();
	        $attributes_data = array ();
	        if (isset ($value))
	        {
	            if ($priority == 'tag')
	                $result = $value;
	            else
	                $result['value'] = $value;
	        }
	        if (isset ($attributes) and $get_attributes)
	        {
	            foreach ($attributes as $attr => $val)
	            {
	                if ($priority == 'tag')
	                    $attributes_data[$attr] = $val;
	                else
	                    $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
	            }
	        }
	        if ($type == "open")
	        {
	            $parent[$level -1] = & $current;
	            if (!is_array($current) or (!in_array($tag, array_keys($current))))
	            {
	                $current[$tag] = $result;
	                if ($attributes_data)
	                    $current[$tag . '_attr'] = $attributes_data;
	                $repeated_tag_index[$tag . '_' . $level] = 1;
	                $current = & $current[$tag];
	            }
	            else
	            {
	                if (isset ($current[$tag][0]))
	                {
	                    $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
	                    $repeated_tag_index[$tag . '_' . $level]++;
	                }
	                else
	                {
	                    $current[$tag] = array (
	                        $current[$tag],
	                        $result
	                    );
	                    $repeated_tag_index[$tag . '_' . $level] = 2;
	                    if (isset ($current[$tag . '_attr']))
	                    {
	                        $current[$tag]['0_attr'] = $current[$tag . '_attr'];
	                        unset ($current[$tag . '_attr']);
	                    }
	                }
	                $last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1;
	                $current = & $current[$tag][$last_item_index];
	            }
	        }
	        elseif ($type == "complete")
	        {
	            if (!isset ($current[$tag]))
	            {
	                $current[$tag] = $result;
	                $repeated_tag_index[$tag . '_' . $level] = 1;
	                if ($priority == 'tag' and $attributes_data)
	                    $current[$tag . '_attr'] = $attributes_data;
	            }
	            else
	            {
	                if (isset ($current[$tag][0]) and is_array($current[$tag]))
	                {
	                    $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
	                    if ($priority == 'tag' and $get_attributes and $attributes_data)
	                    {
	                        $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
	                    }
	                    $repeated_tag_index[$tag . '_' . $level]++;
	                }
	                else
	                {
	                    $current[$tag] = array (
	                        $current[$tag],
	                        $result
	                    );
	                    $repeated_tag_index[$tag . '_' . $level] = 1;
	                    if ($priority == 'tag' and $get_attributes)
	                    {
	                        if (isset ($current[$tag . '_attr']))
	                        {
	                            $current[$tag]['0_attr'] = $current[$tag . '_attr'];
	                            unset ($current[$tag . '_attr']);
	                        }
	                        if ($attributes_data)
	                        {
	                            $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
	                        }
	                    }
	                    $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken
	                }
	            }
	        }
	        elseif ($type == 'close')
	        {
	            $current = & $parent[$level -1];
	        }
	    }
	    return ($xml_array);
	}
 
?>

Open in new window

0
Comment
Question by:peter2001
  • 2
  • 2
4 Comments
 
LVL 7

Expert Comment

by:szewkam
ID: 24435767
hmm... echo $source["decoded_vin_data"]["vin_number"]["common_data"]["year"]; ?
0
 
LVL 7

Accepted Solution

by:
szewkam earned 75 total points
ID: 24435783
sorry, i one mistake, i didn't noticed one level:
echo $source["decoded_vin_data"]["vin_number"]["common_data"]["basic_data"]["year"];
0
 
LVL 1

Author Comment

by:peter2001
ID: 24436148
Hi
thanks that's the bit that was throwing me the order

cheers for you help
0
 
LVL 1

Author Closing Comment

by:peter2001
ID: 31583695
thank you
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

806 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question