Solved

xml to array reading the array

Posted on 2009-05-20
4
244 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

Space-Age Communications Transitions to DevOps

ViaSat, a global provider of satellite and wireless communications, securely connects businesses, governments, and organizations to the Internet. Learn how ViaSat’s Network Solutions Engineer, drove the transition from a traditional network support to a DevOps-centric model.

Question has a verified solution.

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

Suggested Solutions

I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
This article discusses four methods for overlaying images in a container on a web page
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

808 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